如果不在堆上,静态成员住在哪里?

时间:2015-08-21 16:22:26

标签: java static garbage-collection heap null-pointer

如果Statics类的实例设置为null,为什么不抛出NullPointerException?我知道静态变量在所有实例之间共享,它们只有1个副本。这是否意味着静态变量不在堆上?嗯,我想这就是它意味着什么?

所以我想更大的问题是静态变量/方法在哪里生存?

请考虑以下事项:

public class Statics {

public static int count = 0;

public static void main(String[] args){
    System.out.println(Statics.count);
}
}


public class StaticsTest {
public static void main(String[] args){
    Statics t1 = new Statics();
    t1 = null;
    System.out.println(t1.count); //Output of zero was printed which I didn't expect.
}
}

如果他们不住在堆里,我猜他们没有收集垃圾?

1 个答案:

答案 0 :(得分:1)

根本没有堆,内存,GC ......

关键是静态成员属于类而不是实例。因此Java只需要知道它的类型,尽管实例为null