类变量

时间:2011-06-16 20:10:22

标签: java

这可能是一个愚蠢的问题,但我有这个问题在我身边徘徊。在java中的类变量和成员变量之间是否有任何区别,或者它们都是同一个。

class Example {
  protected String str;
  public static String str1 = "xyz";
}

我知道str1是一个类变量,str也是一个类变量吗?

8 个答案:

答案 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变量没有静态修饰符,使其成为成员或实例变量。 类的每个实例都有自己的成员变量副本