如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法

article/2025/9/13 1:38:47

文章目录

  • 变量相关概念
    • 变量/常量
    • 类变量/静态变量
    • 成员变量/实例变量
    • 类属性/实例属性/对象属性
    • 什么是 field
  • 成员变量和类变量的区别
    • 两个变量的生命周期不同
    • 访问方式不同
    • 数据存储位置不同
  • 方法相关概念
  • 示例代码
  • 判断题

变量相关概念

变量/常量

所谓变量就是指可以改变的数据量,即数值可以改变。
所谓常量就是指不可以改变的数据量,即数值不可以改变,可以称为“常数”,也可以称为“定数”,与之相反的是变量。
在这里插入图片描述

类变量/静态变量

类变量是由 static 修饰的变量,也称为静态变量,可以通过类名访问,也可以通过实例对象来访问,通过对象访问也只是编码阶段这样写而已,在编译的时候会被自动转换成“类名称.变量名”的语法格式。

静态变量也叫字段(field)。

成员变量/实例变量

所谓“成员变量”就是类的成员的变量。类的成员就是类的实例对象,每个实例都有的变量叫成员变量。

static 修饰的变量都叫成员变量,也叫实例变量,也可以叫对象变量(很少这样叫),只能通过“实例对象”访问。

成员变量也叫字段(field)。

只有当为成员变量添加 get/set 方法时,我们才称该成员变量是类的属性。

类属性/实例属性/对象属性

类属性就是实例属性,也叫对象属性,是根据 get 方法得来的。

类属性的定义规则:get 方法名,去掉 get 后,将剩余部分首字母小写得到的字符串就是这个类的属性。

例如类 Person 含有方法 getName(),那么 name 就是该类的属性了。

下面例子中,属性名和成员变量名相同,都是 n

public class Test {private String n; // n是成员变量public String getN() { // n是类的属性return n;}public void setN(String n) {this.n = n;}
}

注:属性名和成员变量名通常情况下相同,这符合 JavaBean 规范。

下面例子中,属性是 name,成员变量 n 不是类的属性:

public class Test {private String n; // n不是类的属性public String getName() { // name是类的属性return n;}public void setName(String n) {this.n = n;}
}

注:上述例子的写法不推荐,不符合 JavaBean 的规范,但是我们要理解。

下面的例子中,我们称 username 为只读属性,因为只能通过 get 方法访问,没有提供写入的方法:

public class Test {private String userName; // userName是成员变量public String getUserName(){ // userName是类的属性return "aaa"; } 
}

什么是 field

类中方法外声明的所有变量(静态变量、成员变量、常量)就是 field,中文译为“字段”或“域”,通常称为“字段”。方法的参数、方法内的局部变量不可以称为 field

class A {private int a; // private field 私有域protected double b; // protected field 保护域public String c; // public field 公共域A d; // default access field 默认访问域public static Object e; // public static field 公共静态域
}

成员变量和类变量的区别

两个变量的生命周期不同

  1. 成员变量随着实例的创建而存在,随着实例对象的回收而消失

  2. 静态变量随着类的加载而存在,随着类的消失而消失

访问方式不同

  1. 成员变量只能通过对象来访问

  2. 静态变量可以通过对象来访问,也可以通过类名来访问,通过对象访问只是在编码阶段,编译期会转换成“类名.变量名”的语法格式

数据存储位置不同

  1. 成员变量存储在堆内存的对象中,所以也叫对象的特有数据

  2. 静态变量存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据

方法相关概念

非静态的方法都叫成员方法,必须通过对象才能调用。包含非静态的私有方法、公共方法、保护方法、默认访问权限的方法。私有方法比较特殊,只能通过本类的方法进行调用,但是也必须通过对象才能调用。

静态的方法也叫类方法,只能通过类名进行调用,即便编码时通过对象调用静态方法,编译时也会转换成“类名称.静态方法名”的语法格式。

示例代码

package priv.lwx.javaprac.variable;
public class User {public static final String SKIN_COLOUR = "yellow"; // 这是常量,因为值不变;也叫类变量,也叫静态变量,使用static修饰,仅有一份,所有实例共享,也叫字段(field),不可以称为类属性,因为没有对应的get方法;不可以称为成员变量,因为是通过类名访问,不需要通过对象访问,和对象无关public static String nationality = "china"; // 这叫类变量,也叫静态变量,也叫字段(field),不是成员变量,也不是类属性private String name; // 只能通过对象访问,所以是成员变量,也叫实例变量,也叫字段(field),但是比较特殊,因为是私有的,所以只能由本来的方法才能访问,本类的方法也是通过对象才能访问public String getName() { // name是类的属性,也可以称为实例属性、对象属性,在Java中,类的属性不是看变量,而是看get方法return name;}public void setName(String name) {this.name = name;}
}

判断题

1.static 修饰的变量叫类变量,也就是类属性
答:错。不是类属性,属性看 get 方法

2.非 static 修饰的叫成员变量,也叫实例变量,也叫实例属性
答:错。不是实例属性,属性看 get 方法

3.类属性就是实例属性
答:对

4.有人说 static 修饰的变量才叫 field,有人说方法内声明的变量不能叫 field,参数也不能叫 field
答:错。类中方法外面声明的所有变量叫 field

5.类属性就是实例属性
答:对

6.实例属性就是类属性
答:对

7.实例属性就是类的成员变量
答:错,因为实例属性是根据 get 方法得来的,和类声明的变量无关

8.实例属性就是类变量或者实例变量(也叫成员变量)
答:错,因为实例属性是根据 get 方法得来的,和变量无关。有 static 修饰的变量叫类变量;没有 static 修饰的变量叫实例变量。

9.Java 类属性是如何定义的
答:类属性的定义规则是:将 get 方法名去掉 get 后,将剩余部分首字母小写得到的字符串就是这个类的属性,也叫实例属性。

10.类的成员变量就是类属性
答:错。类属性和变量无关,而是根据 get 方法得到类的属性。

11.类属性一定是类的成员变量
答:错。类属性和变量无关

12.类属性一定是类变量
答:错。类属性是根据 get 方法得到的,属性和变量没有半毛钱关系。类变量是静态变量。

13.类变量就是类属性
答:错。类变量是指 static 修饰的变量,也叫静态变量。而类属性则是根据 get 方法得来的,两者不是同一个概念


http://chatgpt.dhexx.cn/article/7QQtGiIo.shtml

相关文章

第7.12节 可共享的Python类变量

第7.12节 可共享的Python类变量 一、 引言 在上节已经引入介绍了类变量和实例变量,类体中定义的变量为类变量,默认属于类本身,实例变量是实例方法中定义的self对象的变量,对于每个实例都是独有数据,而类变量是该类…

Java基础---类变量和实例变量

类变量和实例变量 成员变量:把类内、方法体外的变量称为成员变量。 package com.chen.offer.BiliBili;/*** author chenshimiao* Email 16622880228163.com* date 2022/2/18 10:27 下午** 区分成员变量 实例变量和类变量*/ public class Clothes {//实例变量Strin…

什么是类变量,什么是实例变量,它们之间有什么区别?

了解术语很重要。实例变量和类变量都是成员变量。它们都是成员变量,因为它们都与特定类相关联。但是,实例变量和类变量之间存在差异。 实例变量 实例变量属于类的实例。换句话说,实例变量属于对象,因为对象是类的实例。每个对象都…

Java类变量的初始化

目录 两个必须的知识点 字节码指令验证 结果分析 非法前向引用变量 最近在学JVM,在学到类的初始化的时候明白了以前不是很理解的类中静态变量的初始化的过程,如果你也对静态变量的初始化有所困扰或者如下图的输出结果有所疑惑,相信你看完…

如何使用Arthas查看类变量值

使用arthas查看类变量值核心思路是&#xff1a;通过实现ApplicationContextAware接口定义ApplicationUtil类&#xff0c;该类可以获取ApplicationContext的所有的Bean实例&#xff0c;然后通过arthas的ognl查看类实例中的属性值。 搭建简易Spring Boot工程 1. pom依赖 <?…

类变量(静态变量),静态方法(类方法)快速了解一篇足矣

什么是类变量&#xff1f; 类变量也叫静态变量&#xff0c;静态属性&#xff0c;是该类所有对象共享的变量&#xff0c;任何一个该类的对象去访问他时&#xff0c;取到的值都是相同的值&#xff0c;同样任何一个该类对象 去修改他时&#xff0c;修改的也是同一个变量。 如何定…

VS 关于 .sln 文件和 .suo 文件

Visual Studio.NET采用两种文件类型&#xff08;.sln和.suo&#xff09;来存储特定于解决方案的设置,它们总称为解决方案文件。为解决方案资源管理器提供显示管理文件的图形接口所需的信息&#xff0c;从而在每次继续开发任务时&#xff0c;不会因开发环境而分散精力&#xff1…

Linux命令ln -snf给文件创建软链接和硬链接

我们知道 ln 命令用于创建链接文件,ln命令的参数选项有很多,此处主要理解 -snf三个: -s:--symbolic比较容易,有-s时表示创建软连接,没有-s时,表示创建硬链接 -f:--force 强行删除任何已存在的目标文件 -n:--no-dereference 把符号链接的文件视为一般文件 一、创建软链…

Visual studio中.sln、.ncb、.rc、.sdf、.def、.vcproj等后缀文件解释

.sln 解决方案文件 Visual Studio使用解决方案文件(后缀为sln的文件)表示一个项目组&#xff0c;它通常包含一个项目中所有的工程文件信息。 .ncb 无编译浏览文件 无编译浏览文件&#xff1a;其中存放了供ClassView、WizardBar和Component Gallery使用的信息&#xff0c;由VC开…

凸函数的性质、判定,凸规划

一. 凸函数的性质 二. 凸函数的判别 判断一个函数是否为凸函数&#xff0c;最基本的方法是使用其定义。 对可微函数&#xff1a; 三、凸规划定义 最优化问题的目标函数为凸函数&#xff0c;不等式约束函数也为凸函数&#xff0c;等式约束函数是仿射的&#xff0c;则称该最优化问…

不等式约束问题-KKT条件 (1)

允许不等式约束的KKT条件&#xff08;卡罗需-库恩-塔克条件&#xff0c;Karush-Kuhn-Tucker Conditions&#xff0c;有时称为一阶必要条件&#xff09;是对只允许等式约束的拉格朗日乘数法的推广。 定义一个优化问题如下&#xff0c;该最优问题既有等式约束&#xff0c;又有不…

《统计学习方法》—— SVM(线性可分支持向量机、线性支持向量机、非线性支持向量机)的详细推导

前言 支持向量机是定义在特征空间上使得间隔最大的线性分类器。它可以形式化为凸二次规划问题。对于这样的凸二次规划问题&#xff0c;我们往往使用拉格朗日方法转为为它的对偶问题。对于这样的对偶问题&#xff0c;我们可以使用SMO最小序列算法进行求解。 我们将介绍三种支持…

深度学习核心技术精讲100篇(十三)-线性可分支持向量机中KKT最有条件理解

前言 KKT最优化条件是Karush[1939],以及Kuhn和Tucker[1951]先后独立发表出來的。这组最优化条件在Kuhn和Tucker发表之后才逐渐受到重视,因此许多情况下只记载成库恩塔克条件(Kuhn-Tucker conditions) 库恩塔克条件(Kuhn-Tucker conditions)是非线性规划领域里最重要的理论…

拉格朗日函数对偶问题、KKT条件

一、概念介绍 KKT最优化条件是Karush(1939)以及Kuhn和Tucker(1951)先后独立发表出来的&#xff0c;但在Kuhn和Tucker发表之后才逐渐受到重视&#xff0c;因此多数情况下记载成库恩-塔克条件(Kuhn-Tucker conditions)。先介绍几个优化的概念。 1.1 优化 最优化问题&#xff0…

西工大机考《 现代设计方法》大作业网考

???202110?? 试卷总分:100 得分:96 一、 单选题 (共 40 道试题,共 80 分) 1.Powell改进算法是一种( )。 A.一维搜索方法 B.处理约束问题的优化方法 C.利用海森矩阵求解的无约束优化方法 D.利用梯度求解的无约束优化方法 2.下列特性中,梯度法不具有的是( )。 A.二次收…

拉格朗日乘子法和KKT 条件解析

1.最优化问题 拉格朗日乘子法和KKT条件是求解最优化问题的重要方法&#xff0c;因此&#xff0c;在正式讲解二者之前&#xff0c;要先谈一谈最优化问题。 通常&#xff0c;需要求解的最优化问题分为3类&#xff1a; 1.1. 无约束优化问题: 对于此类问题&#xff0c;可以通…

直观理解拉格朗日乘子法和Karush-Kuhn-Tucker(KKT)条件

在最优化问题中&#xff0c;经常是会有约束条件的&#xff0c;而约束条件可分为等式约束条件和不等式约束条件&#xff0c;对于前者&#xff0c;我们有拉格朗日乘子法&#xff0c;对于后者&#xff0c;有KKT条件&#xff0c;对于既有等式约束又有不等式约束的最优化问题&#x…

非线性优化问题处理技术(二) Karush–Kuhn–Tucker条件

对于只有等式约束的非线性优化问题&#xff0c;拉格朗日定理是可以适用的&#xff0c;但是当存在不等式约束时就不适用了&#xff0c;此时Karush–Kuhn–Tucker(KKT)条件是更为通用的处理技术&#xff0c;拉格朗日定理其实只是KKT条件定理的特殊情况。 KKT条件一开始称为Kuhn–…

支持向量机SVM(二)

6 拉格朗日对偶&#xff08;Lagrange duality&#xff09; 先抛开上面的二次规划问题&#xff0c;先来看看存在等式约束的极值问题求法&#xff0c;比如下面的最优化问题&#xff1a; 目标函数是f(w)&#xff0c;下面是等式约束。通常解法是引入拉格朗日算子&#xff0c;这里使…

2012年全国卷导数题与含约束的多元函数极值问题(KKT条件)

这道题目编的比较好&#xff0c;第一问就构造的特别巧妙 &#xff08;1&#xff09; f(x) f‘(1)e^(x-1) - f(0) x f(1) f(1) - f(0) 1, f(0)1 f(x) f(1)e^(x-1) - f(0)x 1/2x^2 …