- <font color="#ff0000">运行结果:</font>
- 静态代码块Fu
- 静态代码块Zi
- 构造代码块Fu
- 构造方法Fu
- 构造代码块Zi
- 构造方法Zi
复制代码分析 1、jvm调用了main方法,main进栈。 2、遇到Zi z = new Zi();会先将Fu.class和Zi.class分别加载进内存,再创建对象,当Fu.class加载进内存,父类的静态代码块会随着Fu.class一起加载,当Zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载,所以,第一个输出“静态代码块Fu”,第二个输出“静态代码块Zi”。 3、走Zi类的构造方法,因为java中是分层初始化的,先初始化父类,再初始化子类,所以先走的父类构造,但是在执行父类构造时,发现父类有构造代码块,构造代码块是优先于构造方法执行的,所以第三个输出“构造代码块Fu”,第四个输出“构造方法Fu”。 4、Fu类初始化结束,子类初始化,所以,第五个输出的是“构造代码块Zi”,第六个输出的是“构造方法Zi”。
|