Objekte initialisieren und deklarieren

wSam

Erfahrenes Mitglied
Hallo zusammen

Warum hat man die möglichkeit ein Objekt folgendermassen zu initialisieren?:

Java:
    Integer int1;

Mann kann ja ohne int1 = null zu setzten nicht auf dieses Objekt zugreifen.

Java:
    Integer int1;
    Integer int2 = int1;  // Fehler

Wenn ich aber eine Klasse habe und per Getter Methode auf eine nicht initialisierte Member Variable zugreiffen will, liefert mir dies ja null zurück!

Java:
public class Bean {
  private User m_user;

  public User getUser() {
    return m_user;   // Liefert null zurück
  }
}

Warum hat man also die Möglichkeit ein Objekt mit Integer int1; zu erstellen, obschon man es ja gar nie benutzen kann, ohne etwas zuzuweisen?

Vielen Dank im Voraus und Gruss
 
Hallo,

Instanzvariablen werden bei der Deklaration automatisch mit den entsprechenden Default Werten initialisiert (null -> für Referenztypen und die entsprechenden Standardwerte für primitive (boolean, byte,short, char, int, long, float, double). Lokale Variablen (Variablen innerhalb einer Methode / eines Codeblocks) hingegen werden nicht automatisch initialisiert -> das muss man dann von Hand machen.

Gruß Tom
 
Hallo zusammen

Warum hat man die möglichkeit ein Objekt folgendermassen zu initialisieren?:

Java:
    Integer int1;

Das Objekt ist erstmal nicht vorhanden, nur die Variable ist deklariert. Erst nach einer Zuweisung gibt es Inhalt (auch wenn der null sein sollte).

Das macht man deshalb, weil man die Variable über Blöcke hinaus verwenden will:

Java:
Integer int1;
int x = 12;
if (...bedingung1...) {
    int1 = new Integer(x*22);
} else {
    int1 = new Integer(x*50);
}
System.out.println(in1.toString());

Würde die Variable nur innerhalb der IF-Blöcke deklariert, wäre sie danach nicht mehr zugreifbar, weil eben nur innerhalb der Blöcke gültig.

Gruß
fr_osch
 
@Tom

Und warum werden die lokalen Variablen nicht automatisch initialisiert? Es ist doch eigentlich überflüssig, dass man die selber initialisieren muss? Könnte doch auch defaultmässig auf null gesetzt werden? Das ist der Punkt, welcher mir nicht einleuchtet.
 
Tja, das wissen die Götter (bei Sun;-)

Allenfalls könnte die Variable mit null initialisiert werden - damit würden dann aber alle Methodenaufrufe immer noch nicht funktionieren. Ich habe mir angewöhnt, immer ein " = null" hinten dran zu setzen - zumal mich Eclipse auch warnt, wenn Variablen eventuell uninitalisiert verwendet werden.

Gruß
fr_osch
 
@fr_osch

Ist wohl wirklich der Grund, mit dem if-else Block, scheint mir am einleuchtendsten.


Lokale Variablen (Variablen innerhalb einer Methode / eines Codeblocks) hingegen werden nicht automatisch initialisiert -> das muss man dann von Hand machen.

Aber so ganz klar ist es mir immer noch nicht, warum man lokale Variablen von Hand initialisieren muss. :confused:
 
Huhu,
evtl. hats ja damit was zu tun, dass die lokalen Variablen auf dem Stack liegen und die globalen auf den Heap kommen. Das ist aber nun sehr gewagtes Halbwissen von mir und ist rein spekulativ zu sehen :)
 
Zurück