这可能是一个愚蠢的问题,但我有这个问题在我身边徘徊。在java中的类变量和成员变量之间是否有任何区别,或者它们都是同一个。
class Example {
protected String str;
public static String str1 = "xyz";
}
我知道str1是一个类变量,str也是一个类变量吗?
答案 0 :(得分:2)
是的,区别在于,当我们讨论类属性时,每个类只有一个,当我们讨论实例属性时,每个对象只有一个。
在你的代码中protected String str
声明一个实例属性(或你调用的成员变量),public static String str1 = "xyz"
声明一个类属性。
答案 1 :(得分:1)
有很大的不同。
成员变量绑定到类的实例对象。因此,对于不同的实例对象,变量的值可能不同。
静态变量是整个类的一个 - 您不需要实例化一个对象来访问它。
class A {
public int memberVar;
public static int staticVar;
}
void Test() {
A obj = new A();
int var = obj.memberVar;
//var = A.memberVar -- wrong!
//vs
var = A.staticVar;
}
答案 2 :(得分:0)
它们不一样,str不是类变量 - “static”表示类变量。
根本区别在于,类(静态)变量可以被认为是在类的所有实例之间共享,而每个类的实例都有每个成员(实例)变量的独立副本。
答案 3 :(得分:0)
str
不是类变量。 str
是一个实例变量。
答案 4 :(得分:0)
<强> Class variable 强>
类变量是定义的变量 在一个类(即成员变量)中 无论如何都存在单个副本 该课程的实例数量 存在
<强> Instance variable 强>
在类中定义的变量(即a 成员变量),每个 该类的对象有一个单独的 复制
根据这些定义,str1
是一个类变量,而str
则不是。
答案 5 :(得分:0)
有区别。 str1是一个类变量,对于该类的所有实例都有1个值。 str变量是一个实例变量,Example的每个实例(aka,new Example())都可以有不同的str值,但是Example的所有实例都将共享相同的str1值。
答案 6 :(得分:0)
如果您尝试在类中实现计算已创建实例数的计数器,您将立即看到为什么类变量可以完成工作,而实例变量则不能。
public class MyClass {
private static int count;
public MyClass() {
count++;
...
}
public static int getCount() {
return count;
}
...
}
您甚至可以在创建单个MyClass实例之前调用MyClass.getCount();
。
答案 7 :(得分:0)
str1是一个类变量,因为static是它的修饰符。 static表示变量属于不属于实例的类。 str变量没有静态修饰符,使其成为成员或实例变量。 类的每个实例都有自己的成员变量副本