2012.09.08 08:08
zagadka javowa z klasą wewnętrzną
Zagadka javowa. Jaki będzie wynik wykonania tego programu?
public class Gucio {
private int i;
private int next() {
return i++;
}
private int f() {
class Cezar {
public static int j = next();
}
return Cezar.j;
}
public static void main(String args[]) {
Gucio g = new Gucio();
System.out.println(g.f());
System.out.println(g.f());
System.out.println(g.f());
}
}
komentarze:
2012.09.08 14:07 fdreger
to zależy, jaki będzie hasz obiektów klasy Cezar? czy czegoś nie rozumiem?
2012.09.08 22:30 Piotrek
Hasz? Nie, czemu? Metoda f zwraca ten statyczny atrybut j z klasy Cezar, a on nie ma nic wspólnego z haszem. Zresztą sprawdź - mnie zaskoczyło.
2012.09.14 07:02 jfedor
Ja chyba nie rozumiem dowcipu, bo mi to się nie kompiluje w ogóle.
non-static method next() cannot be referenced from a static context
inner classes cannot have static declarations
2012.09.14 10:29 Piotrek
Tak - i to jest rozwiązanie zagadki (które właśnie zdradziłeś... mogłeś choć w ROT13 napisać). To jest ciekawe, bo ja się, pisząc ten kod, nie tego spodziewałem - nie wiedziałem, że kompilator to miejsce potraktuje jako kontekst statyczny (to jest w metodzie nie będącej metodą klasy), nie wiedziałem też, że inner classes cannot have static declarations.
powrót na stronę główną
RSS