能够改变静态变量值

时间:2018-04-22 18:22:47

标签: java

如下面的链接Link

所述
  

静态变量仅在开始时初始化一次   执行。这些变量将首先在之前初始化   初始化任何实例变量。
    要共享的单个副本   所有班级的实例。

但是我能够改变静态变量的值

class Test {
  static int a =10;
  public static void main(String args[])
  {
    a=20;
    System.out.println("rest of the code...");
    Test1 t= new Test1();
    t.m();
  }
}

public class Test1 {
    void m () 
     {
         System.out.println(Test.a);
     }
}

2 个答案:

答案 0 :(得分:1)

该定义意味着变量将在类定义的上下文中初始化。 Id est,对于您的示例中的类Test,无论您为此类实例化的对象数量,它都只会初始化一次。

还要考虑到初始化与稍后更改变量值不同。

在评论中说明你的问题:

class Test {
    public static long staticAtr = System.currentTimeMillis();
    public long nonStaticAtr = System.currentTimeMillis();

    public static void main(String[] args) {

        Test t1 = new Test();
        Thread.sleep(100);
        Test t2 = new Test();
        System.out.println(t1.staticAtr);
        System.out.println(t1.nonStaticAtr);
        System.out.println(t2.staticAtr);
        System.out.println(t2.nonStaticAtr);
}

t1和t2显示在执行开始时仅初始化一次的相同staticAtr,而t1和t2的nonStaticAtr在每次实例化时初始化一次并具有不同的值。

答案 1 :(得分:0)

引用规则的含义是,当您创建类A的实例Test和此初始化成员a时,如果您现在更改{{1}的值在a到.eg 12中,下一个创建的类以及之前的所有实例都会看到值为12。