Chamando um método Java sem nome

Eu estou olhando o código abaixo e encontrei algo um pouco estranho:

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 ");
    }
}

Eu esperava que isso desse um erro de compilaçãoSystem.out com "y" não pertence a uma declaração de método apenas um{ }. Por que isso é válido? Não vejo como esse código seria ou deveria ser chamado.

Ao executar isso, produzx y c g também, por que ostatic { } ser chamado antes do construtor da sequência?

questionAnswers(8)

yourAnswerToTheQuestion