1. Initialisation de la classe
Pour l'initialisation de classe : l'initialisation de classe n'est généralement initialisée qu'une seule fois, et l'initialisation de classe initialise principalement les variables membres statiques.
La compilation d'une classe détermine le processus d'initialisation de la classe.
Le fichier de classe généré par le compilateur apporte principalement les modifications suivantes aux classes définies dans le fichier source :
1) Déclarez d’abord les variables membres à l’intérieur de la classe dans l’ordre dans lequel les variables membres statiques sont définies.
2) Initialisez selon la séquence d'initialisation des variables membres dans la classe Java d'origine.
La conversion correspondante entre une classe java et la classe compilée est la suivante :
Fichier source :
Copiez le code comme suit :
Personne de classe publique{
public static String name="Zhang San";
âge public statique int ;
statique{
âge=20 ;
System.out.println("Âge d'initialisation");
}
adresse de chaîne statique publique ;
statique{
adresse="Pékin";
âge=34 ;
}
public static void main (String[] arguments) {
System.out.println(nom);
System.out.println(âge);
System.out.println(adresse);
}
}
Lorsque le code source Java est converti en fichier de classe, il est converti en code similaire au suivant :
Copiez le code comme suit :
Personne de classe publique{
nom de chaîne statique public ;
âge public statique int ;
adresse de chaîne statique publique ;
statique{
nom="Zhang San";
âge=20 ;
System.out.println("Âge d'initialisation");
adresse="Pékin";
âge=34 ;
}
public static void main (String[] arguments) {
System.out.println(nom);
System.out.println(âge);
System.out.println(adresse);
}
}
La séquence d'initialisation est exécutée séquentiellement en fonction de la séquence d'initialisation des variables membres de la classe correspondantes après la conversion, de sorte que toutes les variables membres statiques sont déclarées en premier puis affectées, et l'ordre d'affectation est également basé sur l'ordre dans lequel les variables membres statiques sont initialisé dans le code source. Remarque : Définir une variable membre et l'initialiser directement équivaut à l'initialiser dans un bloc de code statique, dans l'ordre dans lequel elles sont définies dans le code source.
2. Génération d'objets
Le processus d'initialisation pour la génération d'objets est similaire au processus d'initialisation d'une classe, mais une étape constructeur sera ajoutée. Le code source est le suivant :
Copiez le code comme suit :
Personne de classe publique{
{
name="李思";
âge=56 ;
System.out.println("Âge d'initialisation");
adresse="Shanghai";
}
public String name="Zhang San";
public int âge = 29 ;
adresse de chaîne publique="Pékin" ;
Personne publique(){
nom="Zhao Liu";
âge=23 ;
adresse="Shanghai";
}
}
Une fois que le compilateur l'a converti en fichier de classe, il sera converti en code similaire au suivant :
Copiez le code comme suit :
Personne de classe publique{
nom de chaîne publique ;
âge public int ;
adresse de chaîne publique ;
Personne publique(){
name="李思";
âge=56 ;
System.out.println("Âge d'initialisation");
adresse="Shanghai";
nom="Zhang San";
âge=29 ;
adresse="Pékin";
nom="Zhao Liu";
âge=23 ;
adresse="Shanghai";
}
}
On peut voir que l'initialisation des variables membres dans la classe et le code dans le bloc de code ont tous été déplacés vers le constructeur, et les variables membres sont initialisées séquentiellement selon l'ordre d'initialisation du fichier source Java, tandis que le code dans le constructeur d'origine Il est déplacé vers la dernière exécution du constructeur. Je n'ai jamais eu une compréhension approfondie du processus d'initialisation de classe auparavant. Je n'arrivais tout simplement pas à comprendre comment l'initialiser. Je ne me souvenais que de la séquence d'initialisation selon le livre, mais je l'ai oubliée après un certain temps, alors cette fois je l'ai oublié. J'ai finalement compris. Il est préférable d'expliquer le mécanisme d'initialisation selon un modèle. Il n'est plus nécessaire de le mémoriser. Ce n'est que si vous le comprenez que vous pourrez ne pas l'oublier.