o que acontece quando tentamos compilar e rodar essa classe?
public class TesteClasse {
static {
System.out.println("vai rodar sem o main() ??? ");
System.exit(0);
}
}
o que acontece quando tentamos compilar e rodar essa classe?
public class TesteClasse {
static {
System.out.println("vai rodar sem o main() ??? ");
System.exit(0);
}
}
Tipo, roda sim.
O Sytem.out.println está dentro de um bloco static. Blocos statics não precisam de um objeto para rodar. É só criar a classe q ele roda
Compila na boa e imprime normalmente quando executa o .class
É curioso se vc comentar a linha “System.exit(0)”. O bloco static continua rodando, mas logo em seguida o java reclama que não existe o metodo main.
eh que, internamente, o java faz algo mais ou menos assim
Class main = bootClassLoader.loadClass(nomeDaClasse);
...
main.getMethod(....).invoke()....
o loadClass eh o responsavel por executar o bloco estico indiretamente. O java precisa ler a clase antes de ver se o main existe ou nao, esse eh o lance.
esse codigo q eu escrevi ai nao existe, eh soh para ilustrar
Galera ainda não entedi como funciona este metodo…
Alguém pode me explicar como realmente este método é executado, o que a maquina virtual faz quando eu chamo esta classe tecnicamente…
Grato pela ajuda e paciencia
Ae “Pangaiada”… O negócio é o seguinte…
Blocos static { } são executados pelo interpretador logo após a carga da classe ( O ClassLoader carregar e registra a classes, então o interpretador antes de qualquer coisa executa o bloco estático )…
E se dentro do bloco estático, voce executar o System.exit(0), a JVM é “abortada” sem dar sequência na chamada do main(String args[])…
Se dentro do bloco estático, não houver essa chamada, após a carga da classe pelo ClassLoader, o interpretador vai com certeza fazer a seguinte chamada:
Class.main(String args[]), que vai dar mesmo o erro: NoClassDefFoundError, pois a classe nao possui o metodo main esperado.
Sugiro a voces fazerem o SL275 (Preparatório para a Certificação de Programador Java) ou lerem o JVM Specifications 3rd Edition…
Bom estudo…