java中的静态变量

pra*_*sad 1 java variables static instance-variables

我有这样的场景

public class Test{

   static int a;
   int b;

   public static void main(String[] args){

      Test t1  = new Test();
      Test t2 = new Test();

   }
}
Run Code Online (Sandbox Code Playgroud)

对象t1和对象t2中的变量是什么?

根据我的理解,因为变量a是静态变量,所以它将在对象1和对象2中.

而b将两者的对象被创建单独的副本.

但是,当我为变量b ie(int b=1)赋值并将其称为System.out.println(t1.b),System.out.println(t2.b)

我没有得到错误,而是从两个对象获得1作为输出.

这是为什么?

Jon*_*eet 8

根据我的理解,因为变量a是静态变量,所以它将在对象1和对象2中.

不,它不是任何一个对象.存在时根本不参考任何特定实例.虽然Java 允许您"通过"引用它,例如,int x = t1.a;您不应该这样做.您应该通过类名称(test.a在您的情况下 - 尽管您也应该开始遵循Java命名约定)来引用它,以明确它是静态的.

并且将为两个对象创建单独的副本.

是.

但是当我为变量b ie(int b=1)分配一个值并将其称为like System.out.println(t1.b), System.out.println(t2.b)而不是获取错误时,我从两个对象获得1作为输出.

那是因为你基本上给它一个初始值来为每个新对象分配.那是完全合理的.还有两个独立变量:

t1.b = 2;
t2.b = 3;
System.out.println(t1.b); // Prints 2
System.out.println(t2.b); // Prints 3
Run Code Online (Sandbox Code Playgroud)