有一个父类和子类,都有静态的成员变量、静态构造方法和静态方法,在我new一个子类对象的时候,加载顺序是怎么样的?

目录

问题:

原理:

(1) 静态内容的加载

(2) 实例内容的加载

(3) 总体加载顺序

实践:


问题:

刷面经,写博客输出,加深印象,特此记录。

与这个内容相关的  内部静态类和非内部静态类的区别

原理:

(1) 静态内容的加载
  • 静态内容(包括静态成员变量和静态代码块)是类级别的,与实例无关。
  • 静态内容的加载发生在类被 JVM 加载时,且只加载一次。
  • 父类的静态内容会先于子类的静态内容加载。
(2) 实例内容的加载
  • 实例内容(包括实例成员变量、实例代码块和构造方法)是对象级别的,每次创建实例时都会执行。
  • 父类的实例内容会先于子类的实例内容加载。
(3) 总体加载顺序

new 一个子类对象时,加载顺序如下:

  1. 父类的静态内容 :父类的静态成员变量和静态代码块按声明顺序加载。
  2. 子类的静态内容 :子类的静态成员变量和静态代码块按声明顺序加载。
  3. 父类的实例内容 :父类的实例成员变量、实例代码块和构造方法按声明顺序加载。
  4. 子类的实例内容 :子类的实例成员变量、实例代码块和构造方法按声明顺序加载。

实践:

public class Parents {

    static {
        System.out.println("static 父类");
    }

    {
        System.out.println("父类 实例");
    }

    public Parents(){
        System.out.println("父类 构造");
    }
}

public class Child extends Parents{

    static {
        System.out.println("static 子类");
    }

    {
        System.out.println("子类 实例");
    }

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


public class Test {
    public static void main(String[] args) {


        Child child = new Child();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值