Java 静态代码块与构造方法的执行顺序(子类与父类)

最新整理代码的时候,发现好几年前的一个小测试单元,一起看一下吧

public class Text {
	public static void main(String[] args) {
		new AA();
	}

	static class AA extends BB {
		static {
			System.out.println("1");
		}

		public AA() {
			System.out.println("2");
		}
	}

	static class BB {
		static {
			System.out.println("3");
		}

		public BB() {
			System.out.println("4");
		}
	}

AA继承了父类BB,然后各自有自己的静态代码块,各自的构造方法,分别执行各自的打印

你们猜最后的执行顺序是什么?  哈哈 一起看一下执行结果吧!

3
1
4
2

怎么样 ?惊喜不惊喜!意外不意外!   

结果是:静态代码块(父)→静态代码块(子)→构造方法(父)→构造方法(子)

其实你仔细想一下就明白这个顺序的道理了

深海个人认为: 系统设计这个顺序的原因有二: 

第一,静态代码块的执行,有点像静态属性,它本身可能作为其他方法的影响资源,所以在其他方法执行前,

必须要先执行其资源影响,这就好比古时候打仗一样,兵马未动,粮草先行。哈哈这个比喻不错吧。

第二,父类的静态代码块与方法优先级高于子类,这个是因为父类的初始化会有可能影响子类的逻辑,

并且它有可能是一对多的影响关系,所以父类会优先执行。

猜你喜欢

转载自blog.csdn.net/qq_39731011/article/details/106457778
今日推荐