静态代码块,非静态代码块,构造函数加载顺序

父类:

package com.stdent;

public class Class {
    //静态代码块
    static {
        System.out.println("父类静态代码块");
    }

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

    /**
     * 无参构造方法
     */
    public Class() {
        System.out.println("父类无参构造方法");
    }

    /**
     * 有参构造方法
     */
    public Class(int a) {
        System.out.println("父类有参构造方法");
    }

    /**
     * 一般静态方法
     */
    public static void normalStaticMethod(){
        System.out.println("父类一般静态方法");
    }

    /**
     * 一般非静态方法
     */
    public void normalMethod(){
        System.out.println("父类一般非静态方法");
    }

}

子类:

package com.stdent;

public class School extends Class{
    //静态代码块
    static {
        System.out.println("子类静态代码块");
    }

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


    /**
     * 无参构造方法
     */
    public School() {
        System.out.println("子类无参构造方法");
    }

    /**
     * 有参构造方法
     */
    public School(int b) {
        System.out.println("子类有参构造方法");
    }

    /**
     * 一般静态方法
     */
    public static void normalStaticMethod(){
        System.out.println("子类一般静态方法");
    }

    /**
     * 一般非静态方法
     */
    @Override
    public void normalMethod(){
        System.out.println("子类一般非静态方法");
    }

}

mian函数:

package com.stdent;

public class Student {
    public static void main(String[] args) {
        School m = new School();
    }
}

运行结果:

静态代码块,非静态代码块,构造函数加载顺序_第1张图片

 运行顺序:父类静态代码块->子类静态代码块->父类非静态代码块->父类无参构造方法->子类非                       静态代码块->子类无参构造方法

具体原因可以看我另一篇文章:

                C++子类为什么先死后生子类为什么先死后生_简单l的博客-CSDN博客

你可能感兴趣的:(java学习,java,jvm,开发语言)