Wie instanziert man Felder?

Sinus

Aktives Mitglied
Hallo zusammen,

ich habe eine generelle Frage. Wie instanstiert man am besten Felder?
Am besten global oder doch im Konstruktor?

Hier zwei Beispiele:

Code:
import javax.swing.JFrame;

public class TextPaneExample {
	
	private JFrame frame = new JFrame();
	TextPaneExample() {} //constructor
	
}

oder so:

Code:
import javax.swing.JFrame;

public class TextPaneExample {
	
	private JFrame frame;
	TextPaneExample() {
                 frame = new JFrame();
         } //constructor
	
}

Wie signifikant sind die Unterschiede?

Vielen Dank und viele Grüße
SinuS
 

Joose

Top Contributor
Einfach gesagt: Unterschied macht es nicht wirklich.
Wobei du beachten musst: Hier und da werden dem Konstruktor Argumente übergeben, welche zum Erstellen von dem einem oder anderen gebraucht wird.

Ich persönlich instanziere immer alles im Konstruktor (damit alles an einem Platz ist), mit Ausnahme der Sachen die hier und da nur lokal gebraucht werden ;)
 

kaoZ

Top Contributor
Zudem wird soweit ich weiß Speicher erst belegt wenn du Instanziierst , bedeutet konkret:

Hier wird gleich Speicher Belegt :

Java:
public class TextPaneExample {
	
	private JFrame frame = new JFrame();
	TextPaneExample() {} //constructor
	
}

und hier erst wenn das Objekt erzeugt wird:

Java:
public class TextPaneExample {
	
	private JFrame frame;
	TextPaneExample() {
                 frame = new JFrame();
         } //constructor
	
}

zugegeben das macht jetzt bei deinem Beispiel nicht so den Unterschied, da du gleich im Konstruktor das Objekt erzeugst, angenommen du würdest nun aber dieses Objekt nur an einer Stelle deiner Anwendung nutzen, so so sollte man die Objekterzeugung immer bis zu diesem Punkt aufschieben um dementsprechend Ressourcen zu sparen.

Außerdem sollte man, insofern man die Möglichkeit hat immer auf Lokal deklarierte Objekte zurückgreifen.

[TIPP]gewöhn dir an
Code:
this.
für Globale Variablen zu verwenden um direkt den unterschied zwischen lokalen und Globalen Variablen zu erkennen.[/TIPP]

Ich würde dir diesen Stil empfehlen :

Java:
public class Foo{

 private JFrame frame;

 public Foo(){
   this.frame = new JFrame();
 }

}
 
Zuletzt bearbeitet:

njans

Top Contributor
gewöhn dir an this. für Globale Variablen zu verwenden um direkt den unterschied zwischen lokalen und Globalen Variablen zu erkennen.

Das würde ich so nicht machen. Generell zu sagen, dass man this verwenden soll, würde oftmals die Code eher aufblähen. Zumal heutige IDEs kein Problem damit haben, dir Attribute farblich hervorzuheben. Notwendig wird this eben nur dann, wenn du lokale Variablen hast, die deine Globalen überschatten. Das hängt jetzt auch wieder vom Stil ab:
- Manche bevorzugen this an dieser Stelle,
- andere nennen die Variablen einfach anders

Beides geht, beides kann man machen. IDEs erlauben einem eben, unter Verwendung von this, Konstruktoren und getter/setter zu erstellen. Da muss man sehen, wie man es lieber hat.
 

kaoZ

Top Contributor
Ok ich hab mich Unverständlich ausgedrückt, verwende im Konstruktor
Code:
this.
um Globale Variablen besser zu erkennen.

ich z.b verwende nach dem Instantiieren von Globalen Variablen nurnoch getter um eben auf diese Attribute zuzugreifen.


Rein als fiktives Beispiel :
Java:
public class Foo{
	 private JPanel content;

	 public Foo(){
	   this.content = new JPanel();
	 }

	 public void addComponents(JComponent...components){
	     for(JComponent comp : components){
	         getContent().add(comp);  // <---
	     }
	 }

	 public JPanel getContent()               {return this.content;}
}
 
Zuletzt bearbeitet:

Sinus

Aktives Mitglied
Hallo kaoZ,
hallo njans,

danke für den Tipp mit this. Man sollte also this immer NUR Konstruktuor verwenden?

Da fällt mir noch gleich eine andere Frage ein:
kann man während der Programmlaufzeit ein bereits erzeugtes, im Speicher befindliches Objekt
löschen, um Ressourcen zu sparen? Ist das möglich?

Gruß
SinuS
 

kaoZ

Top Contributor
danke für den Tipp mit this. Man sollte also this immer NUR Konstruktuor verwenden?

nein, du MUSST den
Code:
this.
"pointer" garnicht verwenden , außer du hast Lokalen Variablen die den gleichen Namen haben wie Globale Variablen, da sonst an dieser Stelle ein Namenskonflikt herrscht.

Allerdings finde ich persönlich es übersichtlicher da ich so direkt sehen kann das es sich hierbei um ein Attribut der klasse Handelt.

kann man während der Programmlaufzeit ein bereits erzeugtes, im Speicher befindliches Objekt
löschen, um Ressourcen zu sparen? Ist das möglich?

Dafür sorg die GC der JVM , die (Speicherbereinigung) kannst du allerdings auch nur erbitten, zudem darf keine Referenz mehr auf das Objekt "zeigen" bzw. existieren, da das nicht mehr genutzte Objekt sonst nicht vom Heap entfernt werden kann.
 
Zuletzt bearbeitet:

Sinus

Aktives Mitglied
zugegeben das macht jetzt bei deinem Beispiel nicht so den Unterschied, da du gleich im Konstruktor das Objekt erzeugst, angenommen du würdest nun aber dieses Objekt nur an einer Stelle deiner Anwendung nutzen, so so sollte man die Objekterzeugung immer bis zu diesem Punkt aufschieben um dementsprechend Ressourcen zu sparen.

angenommen ich habe eine Methode, die jedesmal eine Hilfsvariable, z.B. ein String Feld erzeugt,
wenn diese Methode aufgerufen wird (also eine Methode die in einer for Schleife z.B. 10 mal aufgerufen
wird).
Das würde ja eine Speicherverschwendung zur Folge haben. Von daher würde es
ja doch Sinn machen, dieses String Feld global zu definieren, oder?
 

Joose

Top Contributor
angenommen ich habe eine Methode, die jedesmal eine Hilfsvariable, z.B. ein String Feld erzeugt,
wenn diese Methode aufgerufen wird (also eine Methode die in einer for Schleife z.B. 10 mal aufgerufen
wird).
Das würde ja eine Speicherverschwendung zur Folge haben. Von daher würde es
ja doch Sinn machen, dieses String Feld global zu definieren, oder?

NEIN!
Ein Objekt existiert nur solange eine Referenz auf diese Objekt vorhanden ist. Ist keine vorhanden dann räumt der GC dieses Objekt weg und gibt den Speicher frei.

Sprich wenn du diese Hilfsvariable nicht mehr referenzierst und die Methode verlässt, dann wird der GC diesen Speicher aufräumen.

Je nach Anwendungsfall ist es sinnvoller so etwas lokal bzw. global zu definieren und erstellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Objekt nicht richtig instanziert? Java Basics - Anfänger-Themen 1
C FilenameFilter kann nicht instanziert werden Java Basics - Anfänger-Themen 4
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
Helgon Interface Comparator wird nicht instanziert Java Basics - Anfänger-Themen 3
U HILFE! - per ActionListener Felder enablen....... Java Basics - Anfänger-Themen 5
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
A Felder: arithmetisches und geometrisches Mittel Java Basics - Anfänger-Themen 3
L Datentypen Deklarierte Felder einer Generic Klasse bestimmen Java Basics - Anfänger-Themen 7
Elyt Bei Monopoly werden Felder übersprungen Java Basics - Anfänger-Themen 2
L Listen und Felder Java Basics - Anfänger-Themen 2
neerual Int-Felder erzeugen Java Basics - Anfänger-Themen 16
P Felder König array Java Basics - Anfänger-Themen 6
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
D Felder Java Basics - Anfänger-Themen 2
D Übung Felder java Error kompilieren Java Basics - Anfänger-Themen 4
M Felder leer - überprüfen? Java Basics - Anfänger-Themen 2
S reflection und felder Java Basics - Anfänger-Themen 12
X Verknüpfte Excel Felder mitändern Java Basics - Anfänger-Themen 6
Z Erste Schritte 9x9 Felder Erzeugen+Aufrufen Java Basics - Anfänger-Themen 1
V Zwei Felder Adderen Java Basics - Anfänger-Themen 2
W Methoden Falsche Felder von Methode belgegt Java Basics - Anfänger-Themen 14
M Spielfeld mit 10x10 Felder Java Basics - Anfänger-Themen 13
E Felder bei falscher Eingabe leeren Java Basics - Anfänger-Themen 8
S Felder mit Variablen/Tabellen verknüpfen! Java Basics - Anfänger-Themen 3
M Felder mit Methode verändern Java Basics - Anfänger-Themen 11
W Datentypen Felder mit Potenzen Java Basics - Anfänger-Themen 31
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
C Felder(Größte Zahl, Index) Java Basics - Anfänger-Themen 6
K Felder Java Basics - Anfänger-Themen 5
M 3 Felder, Barcode, reinschreiben in die DB Java Basics - Anfänger-Themen 30
D Datentypen Felder: Deklaration und Initialisierung Java Basics - Anfänger-Themen 5
C Java Felder bearbeiten Hilfe Java Basics - Anfänger-Themen 4
H Felder mit unterschiedl. Typen sortieren Java Basics - Anfänger-Themen 5
B n-dimensionale Felder in m-dimensionale Felder konvertiert Java Basics - Anfänger-Themen 30
H felder vergleichen Java Basics - Anfänger-Themen 6
F Felder von aufrufender Klasse ändern Java Basics - Anfänger-Themen 16
A Felder Java Basics - Anfänger-Themen 7
A Mehrdimensionale Felder Java Basics - Anfänger-Themen 18
C Felder im Dialog zurücksetzen Java Basics - Anfänger-Themen 3
E Wechselnde Felder erzeugen Java Basics - Anfänger-Themen 15
maddin86 Eine Methode für ein- und zweidimensionale double Felder als Parameter? Java Basics - Anfänger-Themen 5
A Felder- Minimum/Maximum Java Basics - Anfänger-Themen 2
D Felder Java Basics - Anfänger-Themen 7
D Felder Java Basics - Anfänger-Themen 2
T Border Layout alle mittleren felder gleich groß Java Basics - Anfänger-Themen 3
C Speicherverwaltung für Felder Java Basics - Anfänger-Themen 8
S EINDIMENSIONALE FELDER? Java Basics - Anfänger-Themen 23
G 3. Aufgaben und komme nicht weiter (Felder, Methoden) Java Basics - Anfänger-Themen 3
M Felder (Wo liegt der Fehler?) Java Basics - Anfänger-Themen 2
D Wie werden Felder grau? Java Basics - Anfänger-Themen 26
S generische Felder Java Basics - Anfänger-Themen 2
A Felder Java Basics - Anfänger-Themen 3
D String mit split teilen und leere Felder behalten Java Basics - Anfänger-Themen 4
R Felder unterschiedlichen Typs Java Basics - Anfänger-Themen 9
J 2 Felder aus DB selektieren u. in JList - eines verstecken? Java Basics - Anfänger-Themen 7
T Suche über mehrere Felder value = key = value Java Basics - Anfänger-Themen 3
B Array doppelt Felder löschen Java Basics - Anfänger-Themen 27
B clone(), Clonable und Felder von Interfacetypen Java Basics - Anfänger-Themen 3
G Felder kopieren Java Basics - Anfänger-Themen 8
G Felder-Länge Java Basics - Anfänger-Themen 2
G Felder zurückgeben? Java Basics - Anfänger-Themen 3
C Früheste Datum aus 3 Felder Java Basics - Anfänger-Themen 20
M Felder innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 2
D Felder vergleichen Java Basics - Anfänger-Themen 14
D Verbindung von Methoden und Felder Java Basics - Anfänger-Themen 3
A Aus dem menü heraus andere Felder bearbeiten Java Basics - Anfänger-Themen 2
S Statische Felder - statische Methoden Java Basics - Anfänger-Themen 2
G variable felder in java? geht das? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben