O programa inicia no método main da classe C. Assim sendo, a primeira coisa que o JVM faz é carregar a classe C. Quando vai fazer isso, ela já roda seus blocos inicializadores estáticos e, com isso, exibe c1 e c6.
Em seguida, o programa começa a rodar o método main. Então exibe c2 e c3. Quando vai rodar b = new B(); ele chama o construtor de B e a JVM precisa carregar a classe B, só que como B herda de A, então primeiro a JVM deve carregar a classe A, rodando seu bloco inicializador estático e exibindo a3. Em seguida, a JVM carrega a classe B exibindo b1 e b4.
Agora ele vai chamar o construtor da superclasse, A, mas como tem um bloco inicializador, esse roda antes do código do construtor e o programa exibe a1. Em seguida roda o código do construtor, exibindo a2.
Agora que vai rodar o construtor de B, primeiro precisa rodar o bloco inicializador, então exibe b3 e, em seguida, roda o construtor, exibindo b2.
Depois, o programa tenta instanciar C e primeiro tem que rodar o bloco inicializador, exibindo c7 e depois roda o construtor, exibindo c8.
Finalmente, o programa exibe c4 e depois o bloco de instruções (válido e que não tem nada de especial), que exibe c5.
Ufa!
Resumindo:
- Carrega a classe C e exibe: c1 e c6
- Continuando o main exibe c2 e c3
- Carrega a classe A e seu bloco inicializador estático exibe a3
- Carrega a classe B e seus blocos inicializadores estáticos exibem b1 e b4 (a ordem que estão na classe)
- Bloco inicializador em A exibe a1
- Construtor de A exibe a2
- Bloco inicializador em B exibe b3
- Construtor de B exibe b2
- Continuando com o main, instancia C e então o bloco inicializador em C exibe c7.
- Construtor de C exibe c8
- Contunando o main, exibe c4 e depois c5
Questão muito boa, como fiz uma questão parecida com essa no livro da kathy recentemente eu já tinha pensado em alguma variações para tornar a questão do livro da kathy mais difícil e já tinha pensado nas soluções não demorei muito tempo pra resolver.
A questão ficaria ainda mais interessante se ele tentasse instanciar novamente uma classe que tem bloco inicializador estático, pois o mesmo não rodaria novamente e seria uma armadilha a mais pra o pessoal cair.