Carregamento de classe
Antes de falar sobre a inicialização da classe, vamos explicar a ordem de carregamento da classe.
O seguinte é extraído de "Thinking in Java 4"
Como tudo em Java é um objeto, muitas atividades
Esse problema é um dos exemplos mais simples. Como será mencionado no próximo capítulo, o código para cada objeto existe em um arquivo separado. A menos que seja realmente necessário código, esse arquivo não será carregado. Geralmente, podemos pensar que o código não será realmente carregado, a menos que um objeto dessa classe seja construído. Como existem alguma ambiguidade sutil no método estático, também pode ser considerado que "o código de classe é carregado quando usado pela primeira vez".
A primeira vez que você usa também é onde ocorre a inicialização estática. Ao carregar, todos os objetos estáticos e blocos de código estático são inicializados em sua ordem original (ou seja, a ordem em que são gravados no código de definição de classe). Obviamente, os dados estáticos serão inicializados apenas uma vez.
Para simplificar, quando a classe tem um relacionamento de herança, o carregador de classe o molda para trás e carrega classes relacionadas.
por exemplo:
A classe B estende a classe A quando nós novos B (), o carregador de classe carrega automaticamente o código de A
Ordem de inicialização da classe
Geralmente a sequência de inicialização é a seguinte:
(Objeto estático e bloco de código estático, inicializado em seu pedido)> Variáveis de membro> Construtor
Código de teste
public class Classinit { / ** * @title: main * @Description: Classe Inicialização Teste * @param: @param args * @return: void * @throws * / public static void main (string [] args) {// TODO Auto-Generated Method Stub New B (); }} classe A {static {System.out.println ("Bloco de código estático de A ..."); } public string S1 = PrtString ("A variável de membro de A ..."); string estática pública S2 = prtString ("A variável estática de A ..."); public a () {System.out.println ("A's Constructor ..."); } public static string prtString (string str) {System.out.println (str); retornar nulo; }} classe B estende A {public String ss1 = prtString ("Variável de membro de B ..."); string estática pública ss2 = prtString ("variável estática de b ..."); public b () {System.out.println ("construtor de B ..."); } estática privada a a = novo a (); static {System.out.println ("Bloco de código estático de B ..."); } {System.out.println ("Bloco de código ..."); }} Resultados do teste
Bloco de código estático de a ...
A variável estática de A ...
Variável estática de B ...
Variáveis de membro de um ...
Construtor de a ...
Bloco de código estático de B ...
Variáveis de membro de um ...
Construtor de a ...
Variáveis de membros de B ...
Bloco de código ...
O construtor de B ...
Resumir
O exposto acima é o conteúdo inteiro da ordem de inicialização da classe em Java. Espero que seja útil para todos que usam Java.