2013-04-25 82 views
0

我對Java編程比較陌生,可能錯過了一些顯而易見的東西,所以請耐心等待。Java:實例化方法變量

我正在創建一個使用Swing API和JDesktopPane創建GUI的程序。在主屏幕上有一個按鈕,顯示「新窗口」。用戶單擊它並將新的JInternalFrame實例化並添加到JDesktopPane。如下,簡化方法:

protected void createNewWindow(JPanel panel) { 

    JInternalFrame fooFrame = new JInternalFrame(); 
    fooFrame.setContentPane(panel); 
    desktop.add(fooFrame); 
} 

我的問題是這樣的。假設用戶點擊了十次按鈕。創建了十個JInternalFrame。所有這些都是方法變量,因此它們具有相同的名稱。

這些舊的fooFrame變量會發生什麼?垃圾收集器是否會在任何階段摧毀它們?我不會想到還有什麼東西仍然在引用它們。 有什麼辦法可以訪問任何這些舊的fooFrames?假設我想在十個fooFrame中的第四個上更改JPanel上的文本顏色。任何方式來做到這一點?

我知道這是一種非常愚蠢的做事方式,只需創建一個JInternalFrame實例變量(可能是一個數組),以在該方法中實例化並添加到JDesktopPane中,這非常簡單。我的問題更多是出於好奇而非任何事情。

回答

2

這些舊的fooFrame變量會發生什麼?垃圾 垃圾收集器是否會在任何階段毀滅它們?

你的對象desktop持有參考在方法創建的fooFrame,他們每個人都會有目前存在的參考,並且將通過desktop被保持。一旦desktop超出範圍,它們將有資格進行垃圾回收。通常,方法變量可以在方法出來後進入垃圾收集,因爲它們在方法範圍內維護,但在您的情況下,您有desktop,它在類級別維護。

+0

謝謝哈比。爲我清理它。 – 2013-04-25 06:41:25

+0

@TomSprud,歡迎您 – Habib 2013-04-25 06:44:44