Chiamare un metodo Java senza nome

Sto guardando il codice qui sotto e ho trovato qualcosa di 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 desse un errore di compilazione poiché System.out con “y” non appartiene a una dichiarazione di metodo solo un { } . Perché è valido? Non vedo come dovrebbe o dovrebbe essere chiamato questo codice.

Quando viene eseguito questo genera anche xycg , perché lo static { } viene chiamato prima del costruttore della sequenza?