2014-02-14 76 views
0

在構造函數中聲明+實例化變量,而不是在構造函數中聲明外部並僅實例化,或者甚至在外部聲明+實例化兩者之間有什麼優勢?在java GUI構造函數中聲明和實例化變量的好處

public class GUIview extends JFrame { 
    public GUIview() { 
     JPanel pan = new JPanel(); 
     JSplitPane splitPane = new JSplitPane(); 
    } 
    public static void main(String[] args) { 
     GUIview view = new GUIview(); 
     view.setVisible(true); 
    } 
} 

public class GUIview extends JFrame { 

    JPanel pan; 
    JSplitPane splitPane; 

    public GUIview() { 
     pan = new JPanel(); 
     splitPane = new JSplitPane(); 
    } 
    public static void main(String[] args) { 
     GUIview view = new GUIview(); 
     view.setVisible(true); 
    } 
} 
+2

那麼,其中一個,在構造函數中聲明的變量立即超出範圍被垃圾收集...... –

回答

0

我假設的代碼是爲了要過帳這裏縮短。但我也認爲一個重要組成部分,省略 - 即在精鑄件被添加到框架或其他容器:

public GUIview() { 
    JPanel pan = new JPanel(); 
    JSplitPane splitPane = new JSplitPane(); 

    // This was omitted 
    pan.add(splitPane); 
    this.add(pan); 
} 

如果這是正確的,那麼一個籠統的說法可能是:在聲明變量的優勢構造函數是你的類不會被不必要的字段弄亂!

這很重要:除非需要訪問它們,否則不應將GUI組件作爲字段存儲在GUI類中。例如:

class GUI extends JPanel 
{ 
    // This component has to be stored as a field, because 
    // it is needed for the "getText" method below 
    private JTextField textField; 

    public GUI() 
    { 

     // This component will just be added to this panel, 
     // and you don't need a reference to this later. 
     // So it should ONLY be declared here, locally 
     JLabel label = new JLabel("Enter some text:"); 
     add(label); 

     textField = new JTextField(); 
     add(textField); 
    } 

    public String getText() 
    { 
     return textField.getText(); 
    } 
} 
0

這裏沒有關於Java用戶界面的特殊規則。

如果必須從多個方法訪問變量,或者必須在調用之間保留該變量的值(通常只調用一次構造函數,但事實並非如此),通常會使用這些字段。

如果變量只能在一個方法中訪問,並且在此方法返回後不再需要它的值,那麼將這樣的變量聲明爲字段是沒有意義的。

相關問題