1. Inicialização da classe
Para inicialização de classe: a inicialização de classe geralmente é inicializada apenas uma vez, e a inicialização de classe inicializa principalmente variáveis de membros estáticos.
A compilação de uma classe determina o processo de inicialização da classe.
O arquivo de classe gerado pelo compilador faz principalmente as seguintes alterações nas classes definidas no arquivo de origem:
1) Primeiro declare variáveis de membro dentro da classe na ordem em que as variáveis de membro estáticas são definidas.
2) Inicialize de acordo com a sequência de inicialização das variáveis de membro na classe Java original.
A conversão correspondente entre uma classe java e a classe compilada é a seguinte:
Arquivo fonte:
Copie o código do código da seguinte forma:
classe pública Pessoa{
public static String nome = "Zhang San";
idade interna estática pública;
estático{
idade=20;
System.out.println("Idade de inicialização");
}
endereço de string estático público;
estático{
endereço = "Pequim";
idade=34;
}
public static void main(String[] args) {
System.out.println(nome);
System.out.println(idade);
System.out.println(endereço);
}
}
Quando o código-fonte Java é convertido em um arquivo de classe, ele é convertido em um código semelhante ao seguinte:
Copie o código do código da seguinte forma:
classe pública Pessoa{
nome da string estática pública;
idade interna estática pública;
endereço de string estático público;
estático{
nome = "Zhang San";
idade=20;
System.out.println("Idade de inicialização");
endereço = "Pequim";
idade=34;
}
public static void main(String[] args) {
System.out.println(nome);
System.out.println(idade);
System.out.println(endereço);
}
}
A sequência de inicialização é executada sequencialmente de acordo com a sequência de inicialização das variáveis de membro de classe correspondentes após a conversão, de modo que todas as variáveis de membro estáticas são declaradas primeiro e depois atribuídas, e a ordem de atribuição também é baseada na ordem em que as variáveis de membro estáticas são inicializado no código-fonte, Nota: Definir uma variável de membro e inicializá-la diretamente é equivalente a inicializá-la em um bloco de código estático, ambos na ordem em que são definidos no código-fonte.
2. Geração de objetos
O processo de inicialização para geração de objetos é semelhante ao processo de inicialização de uma classe, mas um estágio construtor será adicionado. O código-fonte é o seguinte:
Copie o código do código da seguinte forma:
classe pública Pessoa{
{
nome="李思";
idade=56;
System.out.println("Idade de inicialização");
endereço="Xangai";
}
string pública nome = "Zhang San";
idade interna pública=29;
public String address="Pequim";
pessoa pública(){
nome="Zhao Liu";
idade=23;
endereço="Xangai";
}
}
Depois que o compilador o converter em um arquivo de classe, ele será convertido em um código semelhante ao seguinte:
Copie o código do código da seguinte forma:
classe pública Pessoa{
nome da string pública;
idade interna pública;
endereço de string público;
pessoa pública(){
nome="李思";
idade=56;
System.out.println("Idade de inicialização");
endereço="Xangai";
nome = "Zhang San";
idade=29;
endereço = "Pequim";
nome="Zhao Liu";
idade=23;
endereço="Xangai";
}
}
Pode-se ver que a inicialização das variáveis-membro na classe e o código no bloco de código foram todos movidos para o construtor, e as variáveis-membro são inicializadas sequencialmente de acordo com a ordem de inicialização do arquivo fonte java, enquanto o código em o construtor original É movido para a última execução do construtor. Eu nunca tive um conhecimento profundo do processo de inicialização de uma classe antes, simplesmente não conseguia descobrir como inicializá-la. Só conseguia me lembrar da sequência de inicialização de acordo com o livro, mas esqueci depois de um tempo, então desta vez eu. finalmente descobri. É melhor explicar o mecanismo de inicialização de acordo com um modelo. Não há mais necessidade de memorizá-lo.