2016-06-03 7 views
2

In meiner Anwendung habe ich viele Swing-Komponenten. Sollte ich diese Komponentenvariablen in meiner Klasse final machen und dann im Konstruktor instanziieren oder sollte ich sie direkt instantiieren, ohne sie endgültig zu machen.Sollte ich Swing-Komponenten in meiner Anwendung endgültig deklarieren ..?

public class MyClass 
{ 
    private final JFrame firstFrame; 
    private final JPanel firstPanel; 
    private final JButton firstButton; 

    public MyClass() 
    { 
     firstFrame = new JFrame(); 
     firstPanel = new JPanel(); 
     firstJButton = new JButton(); 
    } 
} 

ist dieser Ansatz besser unter Berücksichtigung Design und Optimierung oder der untere ist besser.

public class MyClass 
{ 
    public void createGUI() 
    { 
     private JFrame firstFrame = new JFrame(); 
     private JPanel firstPanel = new JPanel(); 
     private JButton firstJButton = new JButton(); 
    } 
} 
+1

Ihr zweites Snippet ist falsch, Sie können das private Schlüsselwort nicht innerhalb einer Methode haben. In Bezug auf Ihre Frage, wenn die Variable nicht durch eine andere Methode zugegriffen wird, sollte es nicht global sein. Sie sollten es innerhalb der Methode deklarieren, in der es verwendet wird. Wenn eine Variable nicht geändert wird, sollten Sie das endgültige Schlüsselwort hinzufügen. – explv

+0

Siehe auch [* Initial Threads *] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod

Antwort

1

Wenn Sie wissen, dass alle Instanz veriables, in der Klasse definiert ist, wird in Ihrem Konstruktor werden initialisieren und wird nicht geändert, sollten Sie den final Modifikator wählen.

Falls Ihre Instanzvariable außerhalb der Klasse nicht zugänglich ist, können Sie das private deklarieren.

Ihr erstes Code-Snippet ist perfekt, aber das zweite wird nicht einmal kompiliert.

2

Wenn Sie nicht auf die Initialisierung Ihren Swing Komponenten mehr beabsichtigen als einmal, dann können Sie das endgültige Modifikator verwenden, um dies deutlich zu machen. Dies verhindert, dass die Komponenten neu zugewiesen werden.

Sie können keinen privaten Modifikator im Rahmen einer Methode verwenden. Der einzige Modifikator, der im Methodenbereich zulässig ist, ist final Modifikator. Zum Beispiel:

public class MyClass 
{ 
    public void createGUI() 
    { 
     final JFrame firstFrame = new JFrame(); 
     final JPanel firstPanel = new JPanel(); 
     final JButton firstJButton = new JButton(); 
    } 
} 
jedoch

, ziehe ich das Beispiel:

public class MyClass 
{ 
    private final JFrame firstFrame; 
    private final JPanel firstPanel; 
    private final JButton firstButton; 

    public MyClass() 
    { 
     firstFrame = new JFrame(); 
     firstPanel = new JPanel(); 
     firstJButton = new JButton(); 
    } 
} 

Dies würde sicherstellen, dass die Komponenten nicht neu zugeordnet werden können, und bietet auch instanz Umfang Zugriff auf die Komponenten während im ersten Beispiel die Umfang ist auf den Anwendungsbereich der Methode createGUI() beschränkt.

Hoffe, das hilft.

Verwandte Themen