vendredi 30 janvier 2015

Seltsames Verhalten...

Hallo :)



ich habe gerade beim Programmieren n kleines Phänomen. Ich poste mal ne "vereinfachte Version".




Java Code:






  1. public abstract class TestAbstract1 {



  2. public TestAbstract1(){



  3. init();



  4. }



  5. protected abstract void init();



  6. }










Java Code:






  1. public abstract class TestAbstract2 extends TestAbstract1 {



  2. String test = "not changed";



  3. public TestAbstract2(){



  4. super();



  5. }



  6. protected void init() {



  7. test = "changed";



  8. System .out.println("changed test");



  9. }



  10. }










Java Code:






  1. public class TestClass extends TestAbstract2{



  2. public TestClass(){



  3. super();



  4. System .out.println("check 1: "+test);



  5. }



  6. }










Java Code:






  1. public class Test {



  2. public static void main(String [] args) {



  3. TestClass t = new TestClass();



  4. System .out.println("check 2: "+t.test);



  5. }



  6. }









Wenn ich jetzt die main ausführe bekomme ich folgendes log:




Zitat:




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 Code:






  1. ArrayList<String> liste = new ArrayList<>();



  2. public Test2(){



  3. liste.add("test");



  4. }









Warum hier nicht? Hier würde ich ne NPE erhalten weil liste null ist.





Seltsames Verhalten...

0 commentaires:

Enregistrer un commentaire