Feld initialisieren, direkt oder Konstruktor

Status
Nicht offen für weitere Antworten.
M

MartinDr141

Gast
Hallo allerseits,

einfache Situation: ich habe ein Feld in einer Klasse, bsp.

Code:
class MyClass extends Irgendwas
{
  private int i;
  ...
}

Macht es einen Unterschied, ob ich das Feld bei der Deklaration gleich initialisiere oder ob ich das Feld erst im Konstruktor initialisieren? (Mal ausgegangen davon, dass es nur einen Konstruktor gibt)

also 1.

Code:
private int i = 3;

oder 2.

Code:
public MyClass()
{
  i = 3;
}

Wenn es technisch keinen Unterschied macht, was ist zu präferieren?

Danke schonmal.
 

Leroy42

Top Contributor
Im Prinzip macht es keinen Unterschied. Es sei denn, du schreibst etwas wie

Code:
class MyClass extends Irgendwas { 
  private int i; 
  private int iPlus1 = i + 1;
  ... 
}

Die Initialisierungsreihenfolge ist

1) Der Superkonstruktor
2) Die außerhalb des Kunstruktors gefundenen Deklarationen in ihrer syntaktischen Reihenfolge
3) Der Konstruktor.

(Genau genommen werden die Deklarationen von Punkt 2 in den Konstruktor
hinter den super()-Aufruf kopiert).
 
A

Anmeldeboykottierer

Gast
MartinDr141 hat gesagt.:
Macht es einen Unterschied, ob ich das Feld bei der Deklaration gleich initialisiere oder ob ich das Feld erst im Konstruktor initialisieren? (Mal ausgegangen davon, dass es nur einen Konstruktor gibt)

Es gibt einen Fall (ok, eigentlich mehrere), bei denen es einen Unterschied gibt.
Hast du mehr als einen Konstruktor, dann gibt es hier einen Unterschied zwischen den beiden Varianten. Es kann sein, dass du in Konstruktor 1 den Wert anders initialisieren möchtest als in Konstruktor 2.
Vergisst du nun die Initialisierung in einem der Konstruktoren, dann würde natürlich die Standardinitialisierung zum Einsatz kommen. Da hast du dann das Problem, dass du eine initialisierte Variable hast und der Compiler dich nicht warnen kann. Würdest du diese nun lesen und mit der weiter arbeiten, du hättest ein Problem (wegen ggf. falsche Initialisierung).

Fällt nicht großartig ins Gewicht, da dieser Fall wohl eher selten eintritt, immerhin müsste man die Variable initialisieren (direkt bei Deklaration) und gleichzeitig auch in einem Konstruktor einen anderen Wert erwarten (unwahrscheinlich dass man sie dann schon initialisiert), aber es ist halt eine mögliche Fehlerquelle.

Trotzdem finde ich ist der bessere Platz zur Initialisierung der Konstruktor, da du hier den gesamten Initialierungsvorgang an einer Stelle hast.

Gruß Der Anmeldeboykottierer
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
W Classpath Reflexion - Prüfen ob man auf ein Feld ändern kann Allgemeine Java-Themen 2
T JSoup findet input Feld nicht?! Wie kann ich das Feld finden? Allgemeine Java-Themen 3
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
H Wie kann ich überprüfen ob das Feld noch frei ist? Allgemeine Java-Themen 5
M Erste Schritte empty checkbox Feld ausblenden Allgemeine Java-Themen 4
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
K 3Dimensionales Feld - NullPointerException Allgemeine Java-Themen 2
K Java Feld Duplikate löschen Allgemeine Java-Themen 5
R [Android]Wie dynamischen Button-Feld erstellen? Allgemeine Java-Themen 3
C Serialisierung - Standardwert für nachträglich hinzugefügtes Feld Allgemeine Java-Themen 2
G Feld Validierung in Swing Programm Allgemeine Java-Themen 6
reibi Eigene exception mit feld "serialVersionUID" Allgemeine Java-Themen 3
W statisches Feld in lokaler Klasse. Sinnlos! Allgemeine Java-Themen 4
G feld spiegeln bzw. 90° drehen Allgemeine Java-Themen 3
S Dynamisches Feld generieren. Allgemeine Java-Themen 10
G JTextField: Feld für Ausgabe von Meldungen Allgemeine Java-Themen 14
A Variable in if initialisieren Allgemeine Java-Themen 23
F Konstante an main - Argumenten initialisieren Allgemeine Java-Themen 1
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
R Konstanten initialisieren - FRAGE Allgemeine Java-Themen 3
C Statisches Array mit Methode initialisieren Allgemeine Java-Themen 4
T Array mit this initialisieren Allgemeine Java-Themen 18
R Vector.clear() oder neu initialisieren Allgemeine Java-Themen 3
K Java Konstruktoren beim Initialisieren aufrufen Allgemeine Java-Themen 10
kodela Array mit Points initialisieren Allgemeine Java-Themen 6
I Konstanten bei Erzeugung eines Objekts initialisieren Allgemeine Java-Themen 3
M Double Braces Notation um Collections zu initialisieren Allgemeine Java-Themen 9
G Arrays von Klassen initialisieren Allgemeine Java-Themen 13
J Instanz-Felder einer Klasse initialisieren Allgemeine Java-Themen 6
G transientes Objekt mit Wert initialisieren? Allgemeine Java-Themen 7
G Vector beim Initialisieren befüllen Allgemeine Java-Themen 4
RoliMG matrix diagonalen initialisieren Allgemeine Java-Themen 2
R Seltsamer Effekt beim initialisieren. Allgemeine Java-Themen 3
B ArrayList mit Größe initialisieren Allgemeine Java-Themen 16
H Leere Tabelle initialisieren Allgemeine Java-Themen 2
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
B Applikation ohne (direkt)Java installiert zu haben auszuführen Allgemeine Java-Themen 8
N ZIp datei direkt im eclipse speichern Allgemeine Java-Themen 4
W 2D-Grafik Erstellungsdatum JPG direkt aus Header (EXIF) auslesen. Allgemeine Java-Themen 5
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
X Eclipse Direkt von der Soundkarte aufnehmen? Allgemeine Java-Themen 3
H Mit Ant erstelltes jar funktioniert nicht wie direkt in Eclipse Allgemeine Java-Themen 8
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
J CMD direkt in Java ausführen Allgemeine Java-Themen 11
H JPanel direkt in PDF umwandeln Allgemeine Java-Themen 2
G Prozess direkt starten beim Start des Appservers Allgemeine Java-Themen 3
B ZipDatei direkt online auslesen? Allgemeine Java-Themen 8
L Speicherplatz eies RIESEN objektes direkt wieder freigeben Allgemeine Java-Themen 5
G Direkt in ein Objekt deserialisieren Allgemeine Java-Themen 5
R Grafiken. direkt zeichnen Allgemeine Java-Themen 5
S Postscript Datei direkt ausdrucken? Allgemeine Java-Themen 5
S Drucker druckt nicht (Postscript direkt an Drucker) Allgemeine Java-Themen 5
S Änderungen im Source-Code direkt verwenden können? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben