Orden de carga cuando se crea el objeto java (método estático, método de miembro, método de construcción, etc.)

La secuencia de carga del código cuando se crea el objeto es : código estático -> código no estático -> método de construcción.

Si se hereda la clase principal, la secuencia de carga es : código estático de la clase principal -> código estático de la clase secundaria -> código no estático dentro de la clase principal -> método de construcción de la clase principal -> código no estático de la clase hija -> El método de construcción de la subclase.

Entre ellos, el código estático incluye (método estático, variable estática, bloque de código estático, etc.), código no estático (método de miembro, variable de miembro, bloque de código de miembro, etc.) , el mismo tipo de código, escrito en él, cargar primero.

La secuencia de carga del código cuando se crea el objeto: como sigue

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Parentclass Parentclass = new Parentclass();
    }

}
class Parentclass{
    
    
    static{
    
    
        System.out.println("父类静态代码块1");
    }
    static String tem=aa();

    static String aa(){
    
    
        System.out.println("父类的静态方法");
        return "";
    }
    public Parentclass(){
    
    
        System.out.println("父类的构造方法");
    }
    static{
    
    
        System.out.println("父类静态代码块2");
    }

    {
    
    
        System.out.println("父类非静态代码块1");
    }

    String temp = tt();
    String tt(){
    
    
        System.out.println("父类的成员方法");
        return "成员方法";
    }
    {
    
    
        System.out.println("父类非静态代码块2");
    }
}

El resultado de la ejecución es:

父类静态代码块1
父类的静态方法
父类静态代码块2
父类非静态代码块1
父类的成员方法
父类非静态代码块2
父类的构造方法

Si se hereda la clase principal, la secuencia de carga es:

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Childernclass childernclass = new Childernclass();
    }

}
class Parentclass{
    
    
    static{
    
    
        System.out.println("父类静态代码块1");
    }
    static String tem=aa();

    static String aa(){
    
    
        System.out.println("父类的静态方法");
        return "";
    }
    public Parentclass(){
    
    
        System.out.println("父类的构造方法");
    }
    static{
    
    
        System.out.println("父类静态代码块2");
    }

    {
    
    
        System.out.println("父类非静态代码块1");
    }

    String temp = tt();
    String tt(){
    
    
        System.out.println("父类的成员方法");
        return "成员方法";
    }
    {
    
    
        System.out.println("父类非静态代码块2");
    }
}


class Childernclass extends Parentclass{
    
    
    static{
    
    
        System.out.println("子类静态代码块1");
    }
    static String tem=aa();

    static String aa(){
    
    
        System.out.println("子类的静态方法");
        return "";
    }
    public Childernclass(){
    
    
        System.out.println("子类的构造方法");
    }
    static{
    
    
        System.out.println("子类静态代码块2");
    }

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

    String temp = TT();
    String TT(){
    
    
        System.out.println("子类的成员方法");
        return "成员方法";
    }
    {
    
    
        System.out.println("子类非静态代码块2");
    }
}

父类静态代码块1
父类的静态方法
父类静态代码块2
子类静态代码块1
子类的静态方法
子类静态代码块2
父类非静态代码块1
父类的成员方法
父类非静态代码块2
父类的构造方法
子类非静态代码块1
子类的成员方法
子类非静态代码块2
子类的构造方法

Resumen:
Si la clase no se ha cargado:
1. Ejecute primero el bloque de código estático y la inicialización de la variable estática de la clase principal, y el orden de ejecución del bloque de código estático y la variable estática solo está relacionado con el orden de aparición en el código. .
2. Ejecute el bloque de código estático y la inicialización de la variable estática de la subclase.
3. Ejecutar la inicialización de la variable de instancia de la clase principal
4. Ejecutar el constructor de la clase principal
5. Ejecutar la inicialización de la variable de instancia de la
clase secundaria 6. Ejecutar el constructor de la clase secundaria.

Si la clase ha sido cargada:
el bloque de código estático y las variables estáticas no necesitan ser ejecutadas repetidamente Cuando se crea el objeto de clase, solo se ejecutan los métodos de inicialización y construcción de variables relacionados con la instancia.

Supongo que te gusta

Origin blog.csdn.net/qq_2662385590/article/details/110519381
Recomendado
Clasificación