Løsningsforslag til ukeoppgaver uken 17. til 22. oktober 2007 Oppgave 1 --------- a. a1.x=1 a2.x=2 b1.x=4 b2.x=4 Siden B.x er static, er den samme variabel i alle B-objekter. (Vi kan si den ligger i selve klassen snarere enn i det enkelte objektet.) b. Ja, det er lovlig. Det skriver e1.f->1 f1.f->2 F.f ->2 Konklusjon: f finnes i «selve klassen F» og dermed i alle objekter av klassen. Fjerner vi kommenteringen får vi feilmeldingen EF.java:16: non-static method f() cannot be referenced from a static context System.out.println("E.f ->"+E.f()); ^ c. CD.java:8: non-static variable x cannot be referenced from a static context static void p() { System.out.println("x="+x); } ^ Grunn: D.p er static og ligger derfor i selve klassen D. Den kjenner derfor ikke til x som finnes i hvert enkelt objekt. (Sagt på en annen måte: D.p vet ikke hvilken x det er snakk om siden det kan være mange. Eller det er kanskje ikke laget noen D-objekter ennå.) Oppgave 2 --------- Det er lovlig, men vi vet ikke hva det vil skrive ut siden den aktuelle x aldri får noen verdi. Det er tre x-variable: * parameter til f (som først får verdien 2 og så 1 den ene gangen den kalles) * global variabel (som aldri får noen verdi) * lokal variabel i g (som får verdien 2) Oppgave 3 --------- class EmptyStatmUnit extends StatementUnit { public static EmptyStatmUnit parse(DeclListUnit decls) { Log.enterParser(""); EmptyStatmUnit e = new EmptyStatmUnit(); Scanner.skip(Token.semicolonToken); Log.leaveParser(""); return e; } public void printTree() { Log.wTreeLn(";"); } }