level 9
葬花逐流
楼主
现在有一个类:class A{ public static int a=1; },现在用2个类,分别对类A中的变量a进行操作,然后打印出a的值。
class B{
public static void main(String[] args){
A.a += 1;
System.out.println(A.a);
}
}
class C{
public static void main(String[] args){
System.out.println(A.a);
}
}
分别运行B、C,分别会输出:2、1。
请问,2次运行创建了2个线程,在2个线程中分别调用了类A的static field,在第一个线程运行结束后,类A的static field为什么被重置了?我们知道类被加载之后,紧接着就会执行链接、初始化,这时,类的static field就有了值,那现在,是因为第2个线程重新初始化了类A、将静态区内存中的A.a的值重置了么?还是重新为类A分配了静态区内存(应该不是重新分配内存吧)?
2014年07月01日 03点07分
1
class B{
public static void main(String[] args){
A.a += 1;
System.out.println(A.a);
}
}
class C{
public static void main(String[] args){
System.out.println(A.a);
}
}
分别运行B、C,分别会输出:2、1。
请问,2次运行创建了2个线程,在2个线程中分别调用了类A的static field,在第一个线程运行结束后,类A的static field为什么被重置了?我们知道类被加载之后,紧接着就会执行链接、初始化,这时,类的static field就有了值,那现在,是因为第2个线程重新初始化了类A、将静态区内存中的A.a的值重置了么?还是重新为类A分配了静态区内存(应该不是重新分配内存吧)?