Orden de ejecución de bloques de código estático, bloques de código de instancia y métodos constructores en la clase

    Cuando se carga la clase, las declaraciones en el código estático se ejecutarán, solo una vez durante todo el proceso de carga de la clase, y no tiene nada que ver con la cantidad de objetos que se crean.

    Las declaraciones en el bloque de código de instancia se agregarán antes de la primera declaración del método constructor después de la compilación.

    Método de construcción: ejecutado cada vez que se crea un objeto.

Da un ejemplo sencillo

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);
    }
}

El resultado de la ejecución es:

Al analizar los resultados de la ejecución, se extraen las siguientes conclusiones:

1. El bloque de código estático de la clase principal tiene prioridad sobre el bloque de código estático de la subclase y se ejecuta primero.

2. El método de instancia de la clase principal y el método constructor de la clase principal se ejecutan inmediatamente.

3. El bloque de código de instancia de la subclase y el método de construcción de la subclase se ejecutan inmediatamente.

4. Cuando se crea una instancia del objeto por segunda vez, los bloques de código estático de la clase principal y la subclase ya no se ejecutarán.

5. El bloque de código estático se ejecuta primero y sólo una vez, durante la fase de carga de clases.

6. Si la clase no está cargada, cargue la clase primero: cargue la clase base primero, luego cargue la subclase . El bloque de código estático de la clase base se ejecuta primero, y el bloque de código de la subclase se ejecuta más tarde, y ellos sólo se ejecutan una vez.

7. Cuando se crea un objeto, se ejecutará el bloque de código de instancia. Después de ejecutar el bloque de código de instancia, se ejecutará el método constructor final.

  Aviso:

   1. Nuevo objeto de qué clase, el compilador llamará al constructor de esa clase

   2. nuevo objeto de subclase: el compilador llamará al constructor de la subclase

        A. Las variables miembro heredadas de la clase base llaman al constructor de la clase base a través de super()

        b. Miembros recién agregados de subclases

   3. El contenido del método de construcción de la clase base se imprime primero y luego el contenido del método de construcción de la subclase se imprime al final.

   Sin embargo: no puede imprimir el resultado para indicar que primero se llama al constructor de la clase base y luego al constructor de la subclase (declaración incorrecta )

Supongo que te gusta

Origin blog.csdn.net/m0_53677355/article/details/126598933
Recomendado
Clasificación