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.



ksywa:

tu wpisz cyfrę cztery: (to takie zabezpieczenie antyspamowe)

komentarze wulgarne albo co mi się nie spodobają będę kasował


powrot na strone glowna

RSS