如下面的链接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);
}
}
答案 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。