关于类加载和初始化时内部元素加载顺序

关于类加载和初始化时内部元素加载顺序一直是一个我们会搞错的问题,其实关于一个类初始化是类的内部加载顺序如下:

1.当一个类加载时:【没有除了Object以外的其它父类时候】
首先是静态内容【静态成员变量--->静态代码块---->静态方法】---->构造代码块--->构造函数【几乎和构造代码块一起,只是要在构造函数内容之前执行】--->成员变量---->普通方法【局部变量---->局部代码块】

2.当一个类加载时:【除了Object以外还有其它的父类时候】
当初始化子类对象时,首先要加载父类对象,加载父类对象时候也是先加载类成员【被static修饰的】,有静态的先加载静态的,当父类的静态加载完事后,加载子类静态的【这时候要注意是父类的类静态加载完之后,立刻加载子类的静态】,之后是父类构造代码块和构造函数,紧接着是子类的造代码块和构造方法,之后是子类继承的父类的方法,成员变量等。
如果存在多重父类,递归加载,规则如上:
package test;
public class Test{
public static void main(String[] args) {
new HelloB();
}
}
class HelloA{
//构造函数
public HelloA() {
System.out.println("I'm HelloA 的构造函数");
}
//构造代码块
{
System.out.println("I'm HelloA class");
}
//静态代码块
static {
System.out.println("I'm staticA ");
}
}
class HelloB extends HelloA{
public HelloB() {
System.out.println("I'm HelloB 的构造函数");
}
{
System.out.println("I'm HelloB class");
}
static {
System.out.println("I'm staticB ");
}

}
运行结果:
I'm staticA 
I'm staticB 
I'm HelloA class
I'm HelloA 的构造函数
I'm HelloB class
I'm HelloB 的构造函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值