Auf Thema antworten

ich hab da auch noch was anzumerken




AUA ... das macht man so nicht ...


deklarationen können auch im static-context stehen ...


initialiserungen MÜSSEN in methoden/konstruktoren stehen ...


auch in diesem beispiel KANN "liste" NULL sein ... wenn der compiler das "new List<?>()" erst hinter den call von "onInit()" schiebt ...

was durch den call von "super()" immer der fall sein wird ... da "super()" grundsätzlich IMMER zu erst kommen muss ...


wenn nun durch diesen super-call eine methode gecallt wird die ein objekt verändern soll ... was so noch garnicht exisitiert *da die initialisierung erst NACH super() kommen würde* ist das objekt *oder besser die referenz* NULL


ums mal zu veranschaulichen


deinen pseudo-code würde die VM wie folgt übersetzen :


[code=Java]public class B extends A

{

    public static ArrayList<C> liste;


    public B()

    {

        super();

        liste = new ArrayList<C>(15)

    }


    public void onInit()

    {

        liste.add(new C());

    }

}[/code]


die call-reihenfolge wäre aber : B() -> super() -> A() -> onInit() -> liste.add() -> liste=new List<?>

und aus genau diesem grund bekommst du die NPE



Oben