Sto guardando il codice qui sotto e ho trovato qualcosa di un po 'strano:
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 ");
}
}
Mi sarei aspettato che questo fornisse un errore di compilazione poiché System.out
con "y" non appartiene a una dichiarazione di metodo solo a { }
. Perché è valido? Non vedo come dovrebbe o dovrebbe essere chiamato questo codice.
Quando viene eseguito, produce x y c g
anche, perché static { }
viene chiamato prima del costruttore della sequenza?