Begriffe Definition, Deklaration und Initialisierung erklären

Hi,

Definition = Deklaration + Reservierung des Speichersatzes. Eine Definition sieht so aus: private int a;
Was ist dann eine Deklaration? So weit ich weiss, sieht eine Deklaration genau so aus. Bedeuten diese 2 Begriffe dasselbe oder gibt es einen Unterschied?

Referenzvariable und Objekt. Referenzvariable zeigt auf ein Objekt, richtig?
Definition sieht so aus: KlasseA refA; Hier ist refA eine Referenzvariable. Ist aber nicht refA auch ein Objekt der Klasse KlasseA? Sieht eine Definition von einem Objekt nicht genau so aus?
PS: Beim Erzeugen eines Objektes wird implizit auch eine Referenzvariable erstellt, die auf das Objekt zeigt. D.h. wenn ich ein Objekt erzeugen will, muss ich das mit new tun, also Klasse refA = new KlasseA();, solange ich das nicht gemacht habe, existiert nur eine Referenzvariable, die auf eine zufällige Stelle im Arbeitsspeicher zeigt? Korrekt?

Danke

Also die letze Frage hat sich erledigt.
Mit KlasseA refA; erzeugen wir eine Referenzvariable die auf nichts zeigt. Der Compiler initialisiert sie implizit mit null, deshalb ist KlasseA refA das gleiche wie KlasseA refA = null; Ein Objekt wird erst mit new-Operator erzeugt. refA = new KlasseA(), jetzt zeigt die Referenzvariable refA auf das Objekt vom Typ KlasseA. Bisschen verwirrend, aber wichtig.

Deklaration:
private MeineKlasse mk;

Definition:
mk = new MeineKlasse();

Initialisierung:
private MeineKlasse mk = new MeineKlasse();

Hast du immer noch Fragen dazu?

Nein, danke.

[QUOTE=swerflash]Definition sieht so aus: KlasseA refA;[/quote]Das ist eine Deklaration.

[QUOTE=swerflash;2620]Ist aber nicht refA auch ein Objekt der Klasse KlasseA?[/quote]Nein, das Objekt selbst ist nicht greifbar. Das geht nur über die Referenz. refA ist also eine Referenz auf ein Objekt vom Typ der KlasseA.

[QUOTE=swerflash;2620]Sieht eine Definition von einem Objekt nicht genau so aus?[/quote]Siehe meinen Post oben.

[QUOTE=swerflash;2620]PS: Beim Erzeugen eines Objektes wird implizit auch eine Referenzvariable erstellt, die auf das Objekt zeigt.[/quote]Nicht unbedingt. Hier gibts keine Referenz:

   new MeinFenster("Titel").setVisible(true);
}```

[QUOTE=swerflash;2620]...solange ich das nicht gemacht habe, existiert nur eine Referenzvariable, die auf eine zufällige Stelle im Arbeitsspeicher zeigt? Korrekt?[/QUOTE]Nein, solange existiert nur eine Referenz auf ein Objekt vom Typ KlasseA, die auf null (nichts/nirgendwohin) zeigt. Eine Deklaration macht dem Compiler nur den Namen der Variable und deren Typ bekannt.
Eine Definition reserviert auch noch zusätzlich Speicherplatz und gibt die Adresse des Objektes im bereitgestellten Arbeitsspeicher für die JVM zurück und weist sie der Referenz zu. Damit zeigt die Referenz auf das Objekt im Speicher.

Danke für die ausführliche Anwort. Ich habe zuerst irgendwie nur diese Zeile von deinem Post gesehen

"Hast du immer noch Fragen dazu?

Wahrscheinlich zu viel gescrollt, danach habe ich deine Antwort die über dieser Zeile stand gesehen und mein Post editiert.

Ich habe jedoch Frage zu Initialisierung:

Initialisierung:
private MeineKlasse mk = new MeineKlasse();

Initialisierung heisst: Zuweisung von Werten(Startwerte) einer Variablen
Bei einfachen Datentypen sieht eine Initialisierung so aus:
a = 6;
Bei Objekten ist das wahrscheinlich anders? Oder findet in diesem Fall eine Initialisierung statt, weil das Objekt von Typ MeineKlasse mit allen Datenfeldern erzeugt wird?
Ich dachte, dass eine Initialisierung bei Objekten mehr so was ist:
mr = MeineKlasse(12);

Danke.

[QUOTE=swerflash]Initialisierung heisst: Zuweisung von Werten(Startwerte) einer Variablen
Bei einfachen Datentypen sieht eine Initialisierung so aus:
a = 6;[/quote]
Das ist eine Definition, denn hier muss a bereits existieren, der Compiler muss Namen und Typ von der Variablen bei Wertzuweisung kennen, sonst gibts eine Fehlermeldung.

[QUOTE=swerflash;2632]Bei Objekten ist das wahrscheinlich anders? Oder findet in diesem Fall eine Initialisierung statt, weil das Objekt von Typ MeineKlasse mit allen Datenfeldern erzeugt wird?
Ich dachte, dass eine Initialisierung bei Objekten mehr so was ist:
mr = MeineKlasse(12);[/QUOTE]
Auch das ist eine Definition.
Beim Initialisieren werden alle Arbeitsgänge bis zum einsatzbereiten Element quasi in einem Schritt durchgeführt.

Danke dir, hab jetzt verstanden.

Nein, definitiv nicht. Der Compilier initialisiert sie nicht, sondern wirft dir eine Exception. Ein Beispiel:


	public static void main(String[] args) {
		
		MainClass cl;
		System.out.println(cl == null);
	}
}```

Wirft eine Excpetion (The local variable cl may not have been initialized).

Dieser Code hingegen

```public class MainClass {

	public static void main(String[] args) {
		
		MainClass cl = null;
		System.out.println(cl == null);
	}
}```

Wirft keine Exception, sondern gibt "true" aus.

swerflash’ Aussage gilt aber für Instanzvariablen.

    private static MainClass cl;

    public static void main(String[] args) {
        System.out.println(cl == null);
    }
}```