父类和子类加载顺序-面试被问过一次

Posted 醉酒的小男人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了父类和子类加载顺序-面试被问过一次相关的知识,希望对你有一定的参考价值。

总结:先静态后非静态,先父类后子类

-父类静态变量、静态代码块(若有多个按代码先后顺序执行)
-子类静态变量、静态代码块(若有多个按代码先后顺序执行)
-父类非静态变量、非静态代码块(若有多个按代码先后顺序执行)
-父类构造函数
-子类非静态变量、非静态代码块(若有多个按代码先后顺序执行)
-子类构造函数

package classloader;

public class Parent {

    public static int i = 10;
    private int j = 15;

    static {
        System.out.println("父类-静态代码块,无静态变量");
    }

    static {
        i = i + 100;
        System.out.println("父类-静态代码块,有静态变量,i="+i);
    }

    {
        System.out.println("父类-代码块,无静态变量");
    }

    {
        j = j + 200;
        System.out.println("父类-代码块,有静态变量,j="+j);
    }

    public Parent(){
        System.out.println("父类-构造方法");
    }

}

 package classloader;

public class Child extends Parent {

    public static int m = 26;
    private int n = 37;

    static {
        System.out.println("子类-静态代码块,无静态变量");
    }

    static {
        m = m + 300;
        System.out.println("子类-静态代码块,有静态变量,m="+m);
    }

    {
        System.out.println("子类-代码块,无静态变量");
    }

    {
        n = n + 400;
        System.out.println("子类-代码块,有静态变量,n="+n);
    }

    public Child(){
        System.out.println("子类-构造方法");
    }

    public static void main(String[] args) {
       Child child = new Child();
    }

}

在这里插入图片描述

以上是关于父类和子类加载顺序-面试被问过一次的主要内容,如果未能解决你的问题,请参考以下文章

java中父类和子类初始化顺序

C#的构造函数在基类和父类中执行顺序

父类和子类的构造方法的调用顺序

JAVA的初始化顺序:

Java代码执行顺序

类加载器实例化时的顺序