java类的加载顺序和实例化顺序(Demo程序)

Posted mlr-wjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java类的加载顺序和实例化顺序(Demo程序)相关的知识,希望对你有一定的参考价值。

一、main函数中实例化对象

父类

package com.learn;

public class Father {

    //静态变量
    public static int num_1 = 1;

    //静态代码块
    static {
        //判断静态变量和静态代码块的执行顺序
        System.out.println("Father类的静态变量" + num_1);
        System.out.println("Father类的静态代码块");
    }

    //普通变量
    public int num_2 = 2;

    //匿名代码块
    {
        System.out.println("Father类的普通变量=" + num_2);
        System.out.println("Father类的匿名代码块");
    }

    //构造函数
    public Father() {
        System.out.println("Father类的构造函数");
    }

}

子类

package com.learn;

public class Son extends Father{

    //静态变量
    public static int num_3 = 3;

    //静态代码块
    static {
        //判断静态变量和静态代码块的执行顺序
        System.out.println("Son类的静态变量" + num_3);
        System.out.println("Son类的静态代码块");
    }

    //普通变量
    public int num_4 = 4;

    //匿名代码块
    {
        System.out.println("Son类的普通变量=" + num_4);
        System.out.println("Son类的匿名代码块");
    }

    //构造函数
    public Son() {
        System.out.println("Son类的构造函数");
    }

    //主函数
    public static void main(String[] args) {
        Son Son = new Son();
    }
}

运行结果

Father类的静态变量1
Father类的静态代码块
Son类的静态变量3
Son类的静态代码块
Father类的普通变量=2
Father类的匿名代码块
Father类的构造函数
Son类的普通变量=4
Son类的匿名代码块
Son类的构造函数

二、main函数中不实例化对象

//主函数
    public static void main(String[] args) {
        //Son Son = new Son();
    }

运行结果

Father类的静态变量1
Father类的静态代码块
Son类的静态变量3
Son类的静态代码块

三、结论

类在加载时:父类静态变量>父类静态代码块>子类静态变量>大于子类静态代码块
类在实例化时:父类非静态变量>父类匿名代码块>父类构造函数>子类非静态变量>子类非静态代码块>子类构造函数

以上是关于java类的加载顺序和实例化顺序(Demo程序)的主要内容,如果未能解决你的问题,请参考以下文章

java中成员变量代码块构造函数运行顺序

java类的初始化块/执行顺序,实例化对象数据赋值

类加载器实例化时的顺序

类加载器实例化时的顺序

子类继承父类,子类执行的时候,父子类的执行顺序?

从Java虚拟机角度分析类的实例化顺序