M
Markus_
Gast
Hallo,
ich bin gerade auf folgende Unstimmigkeit gestoßen, und ich würde einfach mal ein paar Kommentare dazu interessieren.
Folgendes Programm:
Die Ausgabe ist: 4
So, jetzt habe ich bei Java ist auch eine Insel folgendes gelesen
Soweit, so klar. Allerdings steht dann ein Kapitel darunter das aus dem Code
durch den Compiler folgendes stattfindet:
Stellt sich mir natürlich die Frage, was bei dem ersten Konstruktor passiert:
Tjo, find ich halt ein wenig seltsam, würde mich über Kommentare/Diskussion freuen.
Markus
ich bin gerade auf folgende Unstimmigkeit gestoßen, und ich würde einfach mal ein paar Kommentare dazu interessieren.
Folgendes Programm:
Code:
class Test {
int foo = 3;
public Test() {
this("useless");
System.out.println(foo);
}
public Test(String uselessString) {
foo = 4;
}
public static void main(String... args) {
Test t = new Test();
}
}
So, jetzt habe ich bei Java ist auch eine Insel folgendes gelesen
QuelleDer Aufruf von this() muss die erste Anweisung des Konstruktors sein.
Als Parameter von this() können keine Objektvariablen übergeben werden. Insbesondere Eigenschaften aus der Oberklasse sind noch nicht präsent. Möglich sind aber statische finale Variablen (Konstanten).
Die erste Einschränkung besagt, dass das Erzeugen eines Objektes immer das Erste ist, was ein Konstruktor leisten muss. Nichts darf vor der Initialisierung ausgeführt werden. Die zweite Einschränkung hat damit zu tun, dass die Objektvariablen erst nach dem Aufruf von this() initialisiert werden, so dass ein Zugriff unsinnig wäre – die Werte wären im Allgemeinen 0.
Soweit, so klar. Allerdings steht dann ein Kapitel darunter das aus dem Code
Code:
int foo = 3;
public Test(String uselessString) {
foo = 4;
}
Code:
int foo;
public Test(String uselessString) {
foo = 3;
foo = 4;
}
Stellt sich mir natürlich die Frage, was bei dem ersten Konstruktor passiert:
Code:
int foo = 3;
public Test() {
foo = 3; //Geht nicht, da Konstruktor als erstes ein Objekt erzeugen muss.
//Also: Vor this() darf kein anderer Code stehen
this("useless");
foo = 3; //Würde es hier stehen, düfte müsste das Ergebnis 3 sein und nicht vier.
System.out.println(foo);
}
Tjo, find ich halt ein wenig seltsam, würde mich über Kommentare/Diskussion freuen.
Markus