Patrzę na poniższy kod i znalazłem coś trochę dziwnego:
public class Sequence {
Sequence() {
System.out.print("c ");
}
{
System.out.print("y ");
}
public static void main(String[] args) {
new Sequence().go();
}
void go() {
System.out.print("g ");
}
static {
System.out.print("x ");
}
}
Spodziewałbym się, że spowoduje to błąd kompilacji, ponieważ znak System.out
z "y" nie należy do deklaracji metody, tylko do { }
. Dlaczego to jest ważne? Nie rozumiem, jak ten kod miałby lub powinien zostać wywołany.
Po uruchomieniu tego generuje x y c g
również, dlaczego static { }
get jest wywoływane przed konstruktorem sekwencji?