2012-03-02 162 views
7

讓我們假設某個類是不可達的,但也有由可達的類生成另一個匿名類。第一個可以被垃圾收集器刪除嗎?的Java匿名類和垃圾收集

實施例:


class Outer { 
    public Object getInner() { 
    return new Object() {}; 
    } 
} 

... 

Outer outer = new Outer(); 
Object inner = outer.getInner(); 

// Could the "outer" instance be removed here considering that "inner" is using below? 
+0

在你的代碼呼籲從'Outer'類的方法。那裏可能無法達到? – Marcelo 2012-03-02 09:39:34

回答

8

否,外實例仍然在這種情況下可達到,因爲每個非靜態內部類有一個隱式rerefence到其外類實例。

+0

不同的是,在我的例子匿名類不使用其參考外顯式類(均未內部也不外部)。所以我認爲實際上外面的類是不可達的。 – 2012-03-02 09:52:29

+4

它還有參考。而且JVM無法知道這個引用永遠不會被使用。如果您從不使用此外部引用,則該類應該是靜態內部類或頂級類。 – 2012-03-02 09:56:03

+0

現在變得清楚了。謝謝! – 2012-03-02 10:03:34