Java类中方法的加载顺序

父类:

public class Father {

    static {
        System.out.println("父类静态初始化块1");
    }
    public static int fsm = fatherStaticMethod2();
    {
        System.out.println("父类非静态初始化块1");
    }

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

    static {
        System.out.println("父类静态初始化块2");
    }

    public static int fatherStaticMethod1() {
        System.out.println("父类的静态方法1");
        return 10;
    }

    public static int fatherStaticMethod2() {
        System.out.println("父类的静态方法2");
        return 9;
    }

    {
        System.out.println("父类非静态初始化块2");
    }
}

子类:

public class Child extends Father {

    {
        System.out.println("子类非静态初始化块1");
    }
    static {
        System.out.println("子类静态初始化块2");
    }

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

    public static int childStaticMethod() {
        System.out.println("子类的静态方法");
        return 1000;
    }

    static {
        System.out.println("子类静态初始化块1");
    }
    {
        System.out.println("子类非静态初始化块2");
    }
    public static int fsm = childStaticMethod();

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

运行结果:

父类静态初始化块1
父类的静态方法2
父类静态初始化块2
子类静态初始化块2
子类静态初始化块1
子类的静态方法
父类非静态初始化块1
父类非静态初始化块2
父类的构造方法
子类非静态初始化块1
子类非静态初始化块2
子类的构造方法

总结(加载顺序从上到下):

父类的静态初始块、静态变量(类中按从上到下顺序加载)

子类的静态初始块、静态变量(类中按从上到下顺序加载)

父类的非静态初始化块

父类的构造方法

子类的非静态初始化块

子类的构造方法

猜你喜欢

转载自blog.csdn.net/weixin_30342639/article/details/80807898
今日推荐