Java面试题-看程序写结果04(代码块)

看程序写结果04(代码块)

看程序写结果:
A:一个类的静态代码块,构造代码块,构造方法的执行流程
静态代码块 > 构造代码块 > 构造方法
B:静态的内容是随着类的加载而加载
静态代码块的内容会优先执行
C:子类初始化之前先会进行父类的初始化

代码伺候

class Fu {
	static {
		System.out.println("静态代码块Fu");
	}

	{
		System.out.println("构造代码块Fu");
	}

	public Fu() {
		System.out.println("构造方法Fu");
	}
}

class Zi extends Fu {
	static {
		System.out.println("静态代码块Zi");
	}

	{
		System.out.println("构造代码块Zi");
	}

	public Zi() {
		System.out.println("构造方法Zi");
	}
}

class ExtendsTest2 {
	public static void main(String[] args) {
		Zi z = new Zi();
	}
}

自己做题结果
错误

静态代码块Zi
静态代码块Fu
构造代码块Zi
构造代码块Fu
构造方法Fu
构造方法Zi

最终答案
总结:
A. 类记载器会先加载类,静态也会随着类的加载加载。(静态先执行)
B:在初始化子类之前,一定要先初始化父类,父类初始化完毕,子类才能初始化。

结果分析
1.在创建Zi z = new Zi()之前类加载器会加载Zi,看到Zi又继承Fu就会先去加载Fu类加载器会首先加载类
Fu有一个静态代码块就执行: 静态代码块Fu
2.Fu加载完成后,就会加载Zi(其他的构造方法在调用的时候才会执行)
Zi有一个静态代码块就执行: 静态代码块Zi
3.创建Zi z = new Zi()对象,会先Fu类初始化
就会执行: 构造代码块Fu
在执行: 构造方法Fu
4.Fu类初始化完毕后,初始化Zi类
就会执行: 构造代码块Zi
在执行: 构造方法Zi

静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
发布了151 篇原创文章 · 获赞 0 · 访问量 1641

猜你喜欢

转载自blog.csdn.net/qq_40332952/article/details/104703282