Wo liegt der Unterschied? Deklaration Klasse oder Konstruktur

martin1989

Aktives Mitglied
Hallo!

Was ist der Unterschied zw. diesen beiden Varianten:

Java:
public class Gui {   
    JFrame frame = new JFrame("Tool");
    JPanel panelOne = new JPanel();
		
    public  Gui() {
                             frame.blabla....
                             panelOne.blabla...

                        }

im Vergleich zu diesem

Java:
public class Gui {
    public  Gui() {
                             
                              JFrame frame = new JFrame("Tool");
                              JPanel panelOne = new JPanel();

                              frame.blabla....
                              panelOne.blabla...

                        }



also einmal instanziere ich direkt bei der Klassenbeschreibung, wo ich normalerweise attribute und methoden deklariere und einmal instanziere ich erst im konstruktor. D.h. erst wenn eine instanz von "Gui" erzeugt wird.

Gehör einmal das Frame und Panel zur Klasse, sprich jedes Objekt von "gui" hat das selbe frame und panel? Und einmal wird pro Objekt von "gui" ein neues Frame / Panel erzeugt?


Aufrufen tue ich es ja in beiden Fällen gleich

Java:
main()
{

new gui();
}


vielen dank 🙂

p.s. main code sinngemäß
 
Zuletzt bearbeitet von einem Moderator:
Nein, wenn du willst das jedes Objekt die gleichen Variabeln teilt, dann müsstest du diese statisch deklarieren. In deinem ersten Beispiel sind deine Komponenten eben als Member Variablen gespeichert, sprich du kannst sie jederzeit aus anderen Methoden heruas wieder ansprechen/bearbeiten. In deinem zweiten Beispiel werden die Objekte im Kontruktor erstellt, sind aber nach Beendigung des Konstruktors nicht mehr ansprechbar.
 
ok danke!

und der konstruktor ist ja eigentlich relativ schnell wieder beendet, und zwar genau dann wenn er abgearbeitet wurde 😉

dann werd ich wohl auf die erste möglichkeit ausweichen 🙂

danke!
 
Du solltest halt wissen was du machen willst. Initialsierungen im Kontruktor machen schon Sinn, du solltest alles, auf was du später nicht mehr explizit zugreifen musst zB ein JFrame, ein JLabel etc. im Konstruktor direkt erzeugen ohne extra eine member Variable anzulegen. Objekte auf die du immer Zugriff brauchst und die immer gleich initialsiert werden kannst du dann aber auch prinzipiell direkt bei der deklaration initialsieren.
 

Zurück
Oben