Initialisierung nur im Konstruktor?

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hi, ich hab mal wieder eine Frage :)

und zwar haben wir eine Klasse, deren Konstruktor NICHTS übergeben bekommt.
Initialisiere ich dann Werte trotzdem im Konstruktor oder in der Variablendeklaration?
Und wenn ja worin liegt denn der Unterschied? Hab mich zwar nochmal bissl belesen, aber nen wirklich guten Grund konnt ich nicht finden

Bsp:

Code:
public class Abc1{

private int i = 0;

public Abc1()
{}
...
}

oder

Code:
public class Abc2{

private Abc1 abc1 = null;

public Abc2()
{
abc1 = new Abc1();
}
...
}

und beim 2. Beispiel habe ich mal gehört, dass man Variablen/Objekt etc. immer mit
null initialisieren soll, ist da was dran?


mfg Verjigorm
 
G

Guest

Gast
Hi,

also zwingend vorgeschrieben ist das nicht und einen großen Unterschied macht es auch nicht. Ich persönlich bevorzuge aber auch die Initialisierung im Konstruktor, der besseren Lesbarkeit halber.

Das hier

Code:
int i = null;

geht aber definitiv nicht, da int ein primitiver Typ ist.

Ich weis aber was du meinst, aber auch das ist nicht notwendig, deklarierte Objekte sind per default null.
 

L-ectron-X

Gesperrter Benutzer
Grundsätzlich dient der Konstruktor zur Initialisierung von Variablen einer Klasse, egal, ob ihm Parameter übergeben werden, oder nicht.

Verjigorm hat gesagt.:
und beim 2. Beispiel habe ich mal gehört, dass man Variablen/Objekt etc. immer mit
Code:
 int i = null;
initialisieren soll, ist da was dran?

Der Code ist Quatsch. :) Wenn dann so:
Code:
int i = 0;

Zur Frage: In Methoden ist es wichtig die Variablen zu initialisieren.
Instanzvariablen hingegen werden vom Konstruktor mit Defaultwerten initialisiert, solange der Programmierer nicht selbst Werte vorgibt.
 

Verjigorm

Top Contributor
ok das Beispeil mit i = null war Müll :D
ich meinte das bezogen auf z.b. Objekte

und die sind per default null ?
ich dachte da gabs nen Unterschied zwischen "nicht initalisiert" und "null-gesetzt"

edit: gefunden Rechtschreibfehler dürfen behalten werden :D
edit2: das is mein erstes Projekt, bei dem auch diverse Programmierkonventionen mitberücksichtigt werden, deswegen muss ich mal anfangen mehr Dinge genauer richtig zu machen ;)
 

L-ectron-X

Gesperrter Benutzer
Verjigorm hat gesagt.:
und die sind per default null ?
ich dachte da gabs nen Unterschied
Dazu mal ein kleines Programm:
Code:
public class NullTest {
   private String str;
   private int i;
   private double d;
   private boolean b;
   
   public NullTest() {
      System.out.println(str);
      System.out.println(i);
      System.out.println(d);
      System.out.println(b);
   }
   
   public static void main(String[] args) {
      new NullTest();
   }
}

Verjigorm hat gesagt.:
edit: gefunden Rechtschreibfehler dürfen behalten werden :D
Nee danke, ich sammle aus den anderen Postings schon genug ein. :wink:
 
G

Guest

Gast
Initialisierung mit 0 oder null ist überflüssig, da es per Default diesen Wert annimmt.
Sollten andere Werte als die Defaultwerte genommen werden, dann im entsprechenden Konstruktor
setzen, da sonst unnötigerweise eine Initialisierung stattfindet, die direkt verworfen wird.
 
G

Guest

Gast
und die sind per default null ?
ich dachte da gabs nen Unterschied zwischen "nicht initalisiert" und "null-gesetzt"

Also ich weis nicht, ob das in irgendeiner Spezifikation steht aber aus der Erfahrung kann ich sagen, das deklarierte Objekte null sind, soweit nichts anderes zugewiesen wurde. Ich kenne das allerdings auch noch von "früheren" (Assembler-)Zeiten, daß man sagte, daß zugewiesener Speicher zufälligen Inhalt haben kann und er deshalb auf 0 zu setzen ist, ich denke das ist aber mittlerweile obsolet. Das würde ja in Bezug auf Java bedeuten, das ein deklarieretes Objekt eine zufällige Instanz besitzen könnte.
 

NTB

Bekanntes Mitglied
Hmm, ich komme gerade ein bischen ins Straucheln. So wie ihr es sagt, wird ein Objekt bei der Deklaration mit null initialisiert.
Das stimmt doch aber gar nicht. Ehrlich gesagt, ist mir das grad nicht so ganz klar, fakt ist ja aber, dass bei folgendem der Compiler meckert, dass der String nicht initialisiert wurde:

Code:
public String getMyString() {
   String foo;
   return foo;
}

Ergo zeigt ein deklariertes Objekt auf keine Speicheradresse und liefert deswegen null, wurde aber nicht initialisert?

Bei dem folgenden meckert der Compiler nicht mehr:
Code:
public String getMyString() {
   String foo = null;
   return foo;
}

Aber wenn ich String = null setze, ist das doch keine Initialisierung!?

Hmm...

Also die Frage, die ich mir Stelle, ist, ob es korrekt ist, zu sagen: "Das Objekt wurde mit null initialisiert". Ich denke, die Antwort lautet nein. Sehe ich das richtig?
 
G

Guest

Gast
In Methoden sieht das ganze wiederum anders aus, da gilt eine nicht weiter definierte Instanz für den Compiler als Problem, frag mich nicht, was genau den Unterschieschied ausmacht.
 

NTB

Bekanntes Mitglied
Hmm, ich vermute, dass der Unterschieschied [sic!] ganz einfach nur darin liegt, dass der Comiler das in einer Methode direkt erkennen kann. Sonst eben nicht... aber das ist nur meine Vermutung.
 
G

Guest

Gast
Danke, daß du meinen Vertipper nochmal hervorgehoben hast. :roll:
 
G

Gast09

Gast
ob du eine variable direkt oder initialisierst oder im konstruktor ist egal, da der java compiler die initialisierung für dich in den konstruktor tut, es ist also nur syntaktischer zucker die ausserhalb zuinitialisieren

Zum null Problem, jede Objektreferenz hat genau zwei Zustände: null oder eine gültige Referenz.

Im Stringbeispiel bekommst du bloss einen Hinweis vom Compiler das der variable uninitialisiert ist, da das der Compiler erkennt. Und deswegen musst du sie extra auf null zuweisen um deutlich zumachen, dass das von dir erwünscht ist
 

Leroy42

Top Contributor
Gast09 hat gesagt.:
Und deswegen musst du sie extra auf null zuweisen um deutlich zumachen, dass das von dir erwünscht ist

Wobei ich bis heute nicht verstehe, warum das so ist.

Was spricht eigentlich dagegen, lokale Variablen (Methoden, Blöcke) genau
wie Instanzvariablen automatisch zu initialisieren? ???:L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
S Die Initialisierung von Feldern in ableitender Klasse erzwingen..? Allgemeine Java-Themen 16
C Konvention zur Initialisierung von Attributen Allgemeine Java-Themen 4
S einmalige Initialisierung Allgemeine Java-Themen 7
A Observer und Initialisierung Allgemeine Java-Themen 7
hdi Frage zur Objekt Initialisierung Allgemeine Java-Themen 4
M Initialisierung von Objektvariablen - vor/nach dem this()? Allgemeine Java-Themen 4
M Initialisierung Enumuration Allgemeine Java-Themen 15
F Initialisierung von Variablen Allgemeine Java-Themen 11
G Object erstellung und initialisierung. Allgemeine Java-Themen 4
M Initialisierung von Attributen Allgemeine Java-Themen 7
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
M Konstruktor einer Methode Allgemeine Java-Themen 35
M Frage zum Konstruktor Allgemeine Java-Themen 2
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
J Konstruktor in JSP beim Kompilieren nicht gefunden Allgemeine Java-Themen 3
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
H Beim Konstruktor "this" Allgemeine Java-Themen 4
K Variablen Konstruktor, unendlich viele Allgemeine Java-Themen 3
T Konstruktor löst exception aus Allgemeine Java-Themen 7
C Klassen und Konstruktor Allgemeine Java-Themen 2
W Threads NullPointer: Konstruktor "zu langsam"? Allgemeine Java-Themen 3
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
S OOP this-Referenz als Konstruktor-Übergabe Allgemeine Java-Themen 8
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
ruutaiokwu auf priv. konstruktor von "aussen" zugreifen? Allgemeine Java-Themen 4
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
E Array im Konstruktor übergeben Allgemeine Java-Themen 3
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
J abstrakte Klassen, Konstanten und Konstruktor Allgemeine Java-Themen 9
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
S Konstruktor ermitteln Allgemeine Java-Themen 3
B Konstruktor wird nicht aufgerufen Allgemeine Java-Themen 4
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
B Konstruktor - Vererbungsproblem Allgemeine Java-Themen 2
S konstruktor vererben Allgemeine Java-Themen 5
B Problem mit Methodenaufruf in Konstruktor Allgemeine Java-Themen 6
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
M Konstruktor / statischer Block Allgemeine Java-Themen 13
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
J Klasse auf Konstruktor oder Methode testen? Allgemeine Java-Themen 3
Junktyz Konstruktor Allgemeine Java-Themen 9
T Schleife im Konstruktor? Allgemeine Java-Themen 9
conan2 super-super-Konstruktor? Allgemeine Java-Themen 3
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
MQue zaehlen im Konstruktor Allgemeine Java-Themen 3
J Konstruktor-Aufruf nur aus einem bestimmten Package erlauben Allgemeine Java-Themen 5
T Konstruktor von Hashtable unter Java 5.0! Allgemeine Java-Themen 3
M Feld initialisieren, direkt oder Konstruktor Allgemeine Java-Themen 2
D super-Konstruktor ist nicht super ;) Allgemeine Java-Themen 6
A Objektmethode aus Konstruktor aufrufen? Allgemeine Java-Themen 14
7 Konstruktor Allgemeine Java-Themen 12
M Konstruktor, der Excpetions wirft Allgemeine Java-Themen 2
H Super-Konstruktor Allgemeine Java-Themen 7
A Exception in Konstruktor - trotzdem wird Objekt erzeugt! Allgemeine Java-Themen 3
S Konstruktor vererben Allgemeine Java-Themen 9
thE_29 String Konstruktor - Umwandlungsprobleme Allgemeine Java-Themen 5
J Probleme mit dem Konstruktor Allgemeine Java-Themen 8
G Konstruktor-Aufruf nun mit oder ohne Typ? Allgemeine Java-Themen 9
D Kein public Konstruktor Allgemeine Java-Themen 4
K Exception im Konstruktor / Objekt == null Allgemeine Java-Themen 7
S konstruktor nur innerhalb der klasse aufrufbar Allgemeine Java-Themen 5
S konstruktor im interface Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben