Blocos de inicialização

Olá pessoal, estava estudando esses dias e tive uma dúvida sobre os blocos de inicialização.
Sei que são estáticos (só executam uma vez, quando a JVM carrega a classe) ou de instância (executam toda vez que criamos um objeto, antes do código do construtor e depois da chamada super()). Então, nessa linha de raciocínio, primeiro bloco estático, depois bloco de instância (em ordem que aparecem) e depois código do construtor. Se a classe estende outra, primeiro o estático da classe base, depois o estático da classe filha, chamada a super(), blocos de inicialização da classe base, código do construtor da base, blocos de inicialização da filha, código do construtor da filha.
OK, até ai tudo bem. Desenvolvi um código pra testar essas caracteristicas, mas deparei com uma situação engraçada, a classe $Mensagem foi carregada primeiro, antes da classe que tem o código da main. Porquê? A JVM deveria carregar as classes de acordo com a necessidade, ou carregou dessa forma simplesmente devido a uma ordem qualquer dos nomes das classes?

Pra se situar, lá vai o código que desenvolvi:

class $Mensagem{

	private final static StringBuffer out = new StringBuffer();
	private static int counter = 0;
	
	static{
		add(".\tMomento em que é executado o bloco \"static\" da classe Mensagem.\n");
	}
	
	public static void add(String message){
		out.append(++counter);
		out.append(message);
	}
	
	public static String getMessages(){
		return out.toString();
	}
	
}

class $Base{

	static{
		$Mensagem.add(".\tMomento em que é executado o bloco \"static\" da classe $Base.\n");
	}

	public $Base(){
		$Mensagem.add(".\tMomento em que é executado o construtor da classe $Base.\n");
	}

}

public class _2InitBlocks extends $Base{
//public class _2InitBlocks {

	final static StringBuffer out = new StringBuffer();
	static int counter = 0;

	static{
		$Mensagem.add(".\tMomento em que é executado o bloco \"static\" da classe _2InitBlocks.\n");
	}
	
	{
		$Mensagem.add(".\tMomento em que é executado o bloco de inicialização da referência da classe _2InitBlocks.\n");
	}
	
	public _2InitBlocks(){
		$Mensagem.add(".\tMomento em que é executado o construtor da classe _2InitBlocks.\n");
	}
	
	public void $explica(){
		$Mensagem.add(".\tInvestigar o motivo da classe $Mensagem sempre aparecer primeiro.\n");
		$Mensagem.add(".\tInteressante notar o que acontece quando a classe _2InitBlocks extende $Base.\n");
		$Mensagem.add(".\tOs blocos de inicialização da instância são executados sempre antes do construtor, e na ordem em que aparecem.\n");
		System.out.print($Mensagem.getMessages());
	}

	public static void main(String []args){
		$Mensagem.add(".\tMomento em que é executado o código principal do programa.\n");
		new _2InitBlocks().$explica();
	}

}

E o resultado:

1.      Momento em que é executado o bloco "static" da classe Mensagem.
2.      Momento em que é executado o bloco "static" da classe $Base.
3.      Momento em que é executado o bloco "static" da classe _2InitBlocks.
4.      Momento em que é executado o código principal do programa.
5.      Momento em que é executado o construtor da classe $Base.
6.      Momento em que é executado o bloco de inicialização da referência da classe _2InitBlocks.
7.      Momento em que é executado o construtor da classe _2InitBlocks.
8.      Investigar o motivo da classe $Mensagem sempre aparecer primeiro.
9.      Interessante notar o que acontece quando a classe _2InitBlocks extende $Base.
10.     Os blocos de inicialização da instância são executados sempre antes do construtor, e na ordem em que aparecem.