2015-08-21 70 views
-1

如果將Statics類的實例設置爲null,爲什麼不引發NullPointerException?我知道一個靜態變量是在所有實例中共享的,它們只有一個副本。這是否意味着靜態變量不會生活在堆上?那麼我猜這就是它意味着什麼?如果靜態成員不在堆上,那麼靜態成員在哪裏?

所以我想更大的問題是靜態變量/方法在哪裏生活?

考慮以下幾點:

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. 
} 
} 

如果他們不住在堆上,我猜他們沒有得到垃圾回收?

+0

注意計數是靜態的。 – Emd4600

回答

1

沒有堆內存,GC在所有的點..

點是靜態成員屬於類,而不是實例。所以Java只需要知道它的類型,雖然實例爲空