Podemos executar qualquer código,mesmo antes do metendo main.?

Podemos executar qualquer código,mesmo antes do metendo main.?

O método main é o ponto de partida em uma aplicação java desktop. Algo que precise ser executado antes seria algum código dentro de um bloco estático:

public class Main {
	
	static {
		System.out.println("Eu serei executado antes do main");
	}
	
	public static void main(String[] args) {
		System.out.println("Estou executando depois do bloco estático.");
	}
}

E a saída será:

Eu serei executado antes do main
Estou executando depois do bloco estático.
6 curtidas

A gente aprende, aprende, aprende e morre burro.

Não fazia ideia que era possível usar esse recurso.

Neste caso específico, justifica-se entendendo como o class loader (responsável por coletar as classes e dispô-las na memória da jvm). Ao carregar uma classe, todos os seus elementos estáticos são carregados (enums estão nessa leva).

Existe uma sequência de carregamento das classes? Por exemplo, se em todas as classes eu colocar esse bloco, existe ordem para o carregamento delas?

Conforme o diagrama apresentado nesta thread e no que encontrei aqui, existem diferentes classloaders.
Não consegui identificar (até por não conseguir ler com calma) se há algo que possamos ou façamos para definir uma prioridade no carregamento de classes.

muito obrigado [lucas]

Sim, a ordem em que são referenciadas a partir da sua classe principal.

1 curtida