Hallo 
ich habe gerade beim Programmieren n kleines Phänomen. Ich poste mal ne "vereinfachte Version".
Wenn ich jetzt die main ausführe bekomme ich folgendes log:
Es ist als wenn das in folgender Reihenfolge ausgeführt wird:
1. String test = null;
2. [constructor -> test = "changed";]
3. test = "not changed";
Obwohl es meines Wissens nach so ablaufen müsste:
1. String test = "not changed"
2. [constructor -> test = "changed;]
Ist dieses Verhalten normal?
Es ist doch normalerweise z.b. sowas möglich:
Warum hier nicht? Hier würde ich ne NPE erhalten weil liste null ist.
ich habe gerade beim Programmieren n kleines Phänomen. Ich poste mal ne "vereinfachte Version".
Java:
public abstract class TestAbstract1 {
public TestAbstract1(){
init();
}
protected abstract void init();
}
Java:
public abstract class TestAbstract2 extends TestAbstract1 {
String test = "not changed";
public TestAbstract2(){
super();
}
protected void init() {
test = "changed";
System.out.println("changed test");
}
}
Java:
public class TestClass extends TestAbstract2{
public TestClass(){
super();
System.out.println("check 1: "+test);
}
}
Java:
public class Test {
public static void main(String[] args) {
TestClass t = new TestClass();
System.out.println("check 2: "+t.test);
}
}
Wenn ich jetzt die main ausführe bekomme ich folgendes log:
changed test
check 1: not changed
check 2: not changed
Es ist als wenn das in folgender Reihenfolge ausgeführt wird:
1. String test = null;
2. [constructor -> test = "changed";]
3. test = "not changed";
Obwohl es meines Wissens nach so ablaufen müsste:
1. String test = "not changed"
2. [constructor -> test = "changed;]
Ist dieses Verhalten normal?
Es ist doch normalerweise z.b. sowas möglich:
Java:
ArrayList<String> liste = new ArrayList<>();
public Test2(){
liste.add("test");
}
Warum hier nicht? Hier würde ich ne NPE erhalten weil liste null ist.
Zuletzt bearbeitet: