java基础-类的加载顺序

一、类的加载顺序

代码如下(示例):

class Root {
	static {
		System.out.println("root的静态初始化块");
	}
	{
		System.out.println("root的普通初始化块");
	}	
	public  Root () {
		System.out.println("root的无参构造器");
	}	
	public  Root (String msg) {
		this();
		System.out.println("Root的带参构造器" + msg);
	}	
}
class Mid extends Root {
	static {
		System.out.println("Mid的静态初始化块");
	}	
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid() {
		super("这有个参数");
		System.out.println("Mid的无参构造器");
	}
	public Mid(String msg) {
		this();		
		System.out.println("Mid的带参构造器" + msg);
	}
}
class Leaf extends Mid{
	static {
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}
	public Leaf() {
		super("这还有个参数");
		System.out.println("Leaf的无参构造器");
	}
}
  public class LeafTest {
	public static void main(String[] args) {
		Leaf leaf1 =new Leaf();
		System.out.println("*****************");
		Leaf leaf2 =new Leaf();
	}
}

2运行结果

代码如下(示例):

root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
root的普通初始化块
root的无参构造器
Root的带参构造器这有个参数
Mid的普通初始化块
Mid的无参构造器
Mid的带参构造器这还有个参数
Leaf的普通初始化块
Leaf的无参构造器
*****************
root的普通初始化块
root的无参构造器
Root的带参构造器这有个参数
Mid的普通初始化块
Mid的无参构造器
Mid的带参构造器这还有个参数
Leaf的普通初始化块
Leaf的无参构造器

总结

规律:由父及子,静态先行,代码块先于构造器
1、首先,在new一个对象之前会先加载类,在加载类时会先加载父类(没有自定义父类就是object类),然后依次加载子类,因为静态块是随着类的加载而执行,所以最先输出的是三个类的静态块
2.其次构造器中的super,会再一次到父类,所以会继续依次执行三个类中的非静态代码块,最后是构造函数
3. 因为静态块只在类加载时执行一次,所以当再一次new一个对象时 ,会从父类的非静态代码块开始,然后是构造器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值