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(); } } |
Quoted
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.
Source code |
|
1 2 3 4 |
int foo = 3; public Test(String uselessString) { foo = 4; } |
Source code |
|
1 2 3 4 5 |
int foo; public Test(String uselessString) { foo = 3; foo = 4; } |
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); } |
Quoted
Original von Markus an anderer Stelle
[...] Dann geht das nicht, da die an der Stelle des this()-Aufrufes noch nicht initialisiert sind. Das erste, was ein Konstruktor leisten muss, ist das Objekt erzeugen. Erst dann (nach dem this) werden die Variablen initialisiert. Folglich funktioniert auch der Aufruf von Objektvariablen nicht mit this()
Stimmt so wohl nicht.Quoted
Erst dann (nach dem this) werden die Variablen initialisiert.
Erfahrener Schreiberling
Date of registration: Oct 17th 2003
Location: Dresden
Occupation: Um ein bißchen mehr Ahnung zu haben als andere