Hallo,
ich bin gerade auf folgende Fragestellung gestoßen, und mich würden einfach mal ein paar Kommentare/Ideen dazu interessieren.
Folgendes Programm (Java):
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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();
}
}
|
Die Ausgabe ist: 4
So, jetzt habe ich bei
Java ist auch eine Insel folgendes gelesen
Der 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.
Quelle
Soweit, so klar. Allerdings steht dann
ein Kapitel darunter das aus dem Code
|
Source code
|
1
2
3
4
|
int foo = 3;
public Test(String uselessString) {
foo = 4;
}
|
durch den Compiler folgendes stattfindet:
|
Source code
|
1
2
3
4
5
|
int foo;
public Test(String uselessString) {
foo = 3;
foo = 4;
}
|
Stellt sich mir natürlich die Frage, was bei dem ersten Konstruktor passiert:
|
Source code
|
1
2
3
4
5
6
7
8
9
|
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. Ist Java so schlau, dass er dort unterscheidet? Mich würden mal eure Gedanken dazu interessieren (:
Markus
Edit: "Ist Java so schlau, dass er dort unterscheidet?"
-Hm, habe gerade einen Vorschlag erhalten, der stimmig klingt, aber vlt. hat ja noch jemand eine andere Idee