Ordre d'exécution des blocs de code statiques, des blocs de code d'instance et des méthodes de constructeur dans la classe

    Lorsque la classe est chargée, les instructions du code statique ne seront exécutées qu'une seule fois pendant tout le processus de chargement de la classe, et cela n'a rien à voir avec le nombre d'objets créés.

    Les instructions du bloc de code d'instance seront ajoutées avant la première instruction de la méthode constructeur après la compilation.

    Méthode de construction : exécutée à chaque création d'un objet

Donnez un exemple simple

public class Person {
    public String name;
    public String gender;
    public int age;
    public Person(String name,String gender,int age){
        this.name =name;
        this.gender = gender;
        this.age = age;
        System.out.println("基类的构造方法");
    }

    {
        System.out.println("基类的实例代码块");
    }

    static {
        System.out.println("基类中的静态代码块");
    }
}
public class Student extends Person{
    public int id;

    public Student(String name,String gender,int age,int id){
        super(name,gender,age);
        this.id = id;
        System.out.println("子类的构造方法");
    }

    {
        System.out.println("子类的实例代码块");
    }

    static {
        System.out.println("子类的静态代码块");
    }

    public static void main(String[] args) {
        Student s1 = new Student("张三","男",24,11111);
        System.out.println("=================================");
        Student s2 = new Student("李四","男",35,11668);
    }
}

Le résultat de l'exécution est :

En analysant les résultats d'exécution, les conclusions suivantes sont tirées :

1. Le bloc de code statique de la classe parent est prioritaire sur le bloc de code statique de la sous-classe et est exécuté le plus tôt possible.

2. La méthode d'instance de classe parent et la méthode de constructeur de classe parent sont exécutées immédiatement.

3. Le bloc de code d'instance de la sous-classe et la méthode de construction de la sous-classe sont exécutés immédiatement.

4. Lorsque l'objet est instancié pour la deuxième fois, les blocs de code statiques de la classe parent et de la sous-classe ne seront plus exécutés.

5. Le bloc de code statique est exécuté une première et une seule fois, lors de la phase de chargement de la classe.

6. Si la classe n'est pas chargée, chargez d'abord la classe : chargez d'abord la classe de base, puis chargez la sous-classe.Le bloc de code statique de la classe de base est exécuté en premier, et le bloc de code de la sous-classe est exécuté plus tard, et ils ne sont exécutés qu’une seule fois.

7. Lorsqu'un objet est créé, le bloc de code d'instance sera exécuté. Une fois le bloc de code d'instance exécuté, la méthode de constructeur finale sera exécutée.

  Avis:

   1. Nouvel objet de quelle classe, le compilateur appellera le constructeur de cette classe

   2. nouvel objet de sous-classe : le compilateur appellera le constructeur de la sous-classe

        a. Les variables membres héritées de la classe de base appellent le constructeur de la classe de base via super()

        b. Membres des sous-classes nouvellement ajoutés

   3. Le contenu de la méthode de construction de la classe de base est imprimé en premier, puis le contenu de la méthode de construction de la sous-classe est imprimé en dernier.

   Cependant : vous ne pouvez pas imprimer le résultat pour indiquer que le constructeur de la classe de base est appelé en premier, puis que le constructeur de la sous-classe est appelé (mauvaise déclaration )

Je suppose que tu aimes

Origine blog.csdn.net/m0_53677355/article/details/126598933
conseillé
Classement