Java 类变量

Java 类变量,java,Java,这可能是一个愚蠢的问题,但我一直在想这个问题。java中的类变量和成员变量之间有什么区别吗?或者它们都是同一个变量 class Example { protected String str; public static String str1 = "xyz"; } 我知道str1是一个类变量,str也是一个类变量吗?它们不一样,str不是一个类变量,“static”表示一个类变量 基本区别在于,类(静态)变量可以被认为是在类的所有实例之间共享的,而类的每个实例都有一个独立的成员(实例)

这可能是一个愚蠢的问题,但我一直在想这个问题。java中的类变量和成员变量之间有什么区别吗?或者它们都是同一个变量

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

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

它们不一样,str不是一个类变量,“static”表示一个类变量


基本区别在于,类(静态)变量可以被认为是在类的所有实例之间共享的,而类的每个实例都有一个独立的成员(实例)变量副本。

它们不一样,str不是类变量,“static”表示类变量


基本区别在于,类(静态)变量可以被认为是在类的所有实例之间共享的,而类的每个实例都有一个独立的成员(实例)变量副本。

是的,区别在于,当我们谈论类属性时,每个类只有一个,当我们谈论实例属性时,每个对象只有一个


在您的代码中,受保护字符串str声明实例属性(或您称之为成员变量)和公共静态字符串str1=“xyz”声明类属性。

是,区别是,当我们谈论类属性时,每个类只有一个,当我们谈论实例属性时,每个对象只有一个


在您的代码中,受保护字符串str声明实例属性(或您称之为成员变量)和公共静态字符串str1=“xyz”声明类属性。

有很大区别

成员变量绑定到类的实例对象。因此,对于不同的实例对象,变量的值可能不同

静态变量是整个类的一个变量-您不需要实例化一个对象来访问它

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;
}

这有很大的区别

成员变量绑定到类的实例对象。因此,对于不同的实例对象,变量的值可能不同

静态变量是整个类的一个变量-您不需要实例化一个对象来访问它

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;
}

str
不是类变量
str
是实例变量。

str
不是类变量
str
是一个实例变量。

类变量是定义的变量 在 不管哪一个副本存在 这个类有多少个实例 存在

类中定义的变量(即 成员变量),每个 类的对象具有单独的 抄袭

根据这些定义,
str1
是一个类变量,
str
不是。

类变量是定义的变量 在 不管哪一个副本存在 这个类有多少个实例 存在

类中定义的变量(即 成员变量),每个 类的对象具有单独的 抄袭


根据这些定义,
str1
是一个类变量,
str
不是。

有区别。str1是一个类变量,该类的所有实例都有一个值。str变量是一个实例变量,Example的每个实例(aka,new Example())都可以有不同的str值,但Example的所有实例都将共享相同的str1值。

存在差异。str1是一个类变量,该类的所有实例都有一个值。str变量是一个实例变量,Example的每个实例(aka,new Example())都可以有不同的str值,但Example的所有实例都将共享相同的str1值。

如果您试图在类中实现一个计数器来计算创建了多少个实例,您将立即看到为什么类变量可以做这项工作,而实例变量不能

public class MyClass {
   private static int count;

   public MyClass() {
      count++;
      ...
   }

   public static int getCount() {
      return count;
   }
   ...
}

您可以调用
MyClass.getCount()甚至在创建单个MyClass实例之前。

如果您尝试在类中实现一个计数器来计算已创建的实例数,您将立即看到为什么类变量可以完成此工作,而实例变量不能

public class MyClass {
   private static int count;

   public MyClass() {
      count++;
      ...
   }

   public static int getCount() {
      return count;
   }
   ...
}

您可以调用
MyClass.getCount()甚至在创建单个MyClass实例之前。

str1是一个类变量,因为static是它的修饰符。静态意味着变量属于类而不是实例。 str变量没有使其成为成员或实例变量的静态修饰符。
类的每个实例都有自己的成员变量副本,str1是类变量,因为static是它的修饰符。静态意味着变量属于类而不是实例。 str变量没有使其成为成员或实例变量的静态修饰符。 类的每个实例都有自己的成员变量副本