Java初始化顺序详解

Java对象初始化顺序
父类静态代码块、父类静态成员变量——同级,按代码顺序执行
子类静态代码块、子类静态成员变量——同级,按代码顺序执行
父类普通代码块、父类普通成员变量——同级,按代码顺序执行
父类构造方法
子类普通代码块、子类普通成员变量——同级,按代码顺序执行
子类构造方法

注意:静态内容只在类加载时执行一次,之后不再执行。
默认调用父类的无参构造方法,可以在子类构造方法中利用super指定调用父类的哪个构造方法

Father类

class Father {
	public Father() {
		System.out.println("父类无参构造方法");
	}

	static {
		System.out.println("父类静态代码块1");
	}
	private static int a = Help.fatherStaticMemberVarInit();
	static {
		System.out.println("父类静态代码块2");
	}
	{
		System.out.println("父类普通代码块1");
	}
	private int b = Help.fatherMemberVarInit();
	{
		System.out.println("父类普通代码块2");
	}

	public Father(int v) {
		System.out.println("父类带参构造方法");
	}
}

Son类

class Son extends Father {
	static {
		System.out.println("子类静态代码块1");
	}
	private static int a = Help.sonStaticMemberVarInit();
	static {
		System.out.println("子类静态代码块2");
	}
	{
		System.out.println("子类普通代码块1");
	}
	private int b = Help.sonMemberVarInit();
	{
		System.out.println("子类普通代码块2");
	}

	public Son() {
		// super(2018);
		System.out.println("子类构造方法");
	}
}

class Help {
	public static int fatherStaticMemberVarInit() {
		System.out.println("父类静态成员变量");
		return 0;
	}

	public static int fatherMemberVarInit() {
		System.out.println("父类普通成员变量");
		return 0;
	}

	public static int sonStaticMemberVarInit() {
		System.out.println("子类静态成员变量");
		return 0;
	}

	public static int sonMemberVarInit() {
		System.out.println("子类普通成员变量");
		return 0;
	}
}

Test类

public class Test {
	public static void main(String[] args) {
		Son son1 = new Son();
		System.out.println("===================");
		Son son2 = new Son();
	}
}

结果图
在这里插入图片描述
//先跑父类静态代码块和父类静态成员变量,从头到尾按先后顺序来,代码块和成员变量同优先级,遇到哪个跑哪个;
//然后跑子类静态代码块和子类静态成员变量,从头到尾按先后顺序来,代码块和成员变量同优先级,遇到哪个跑哪个;
//再跑父类普通代码块和父类普通成员变量,从头到尾按先后顺序来,代码块和成员变量同优先级,遇到哪个跑哪个;
//跑完父类直接继续跑父类无参构造方法;
//跑完父类无参构造方法再跑子类普通代码块和子类普通成员变量,从头到尾按先后顺序来,代码块和成员变量同优先级,遇到哪个跑哪个;
//最后跑子类无参构造方法。
//静态内容只在类架子啊时执行一次,之后不再执行
//默认调用父类的无参构造方法,可以在子类构造方法中利用super指定调用父类的哪个构造方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值