麻烦先看代码主要内容是关于静态初始化和构造器的执行顺序的问题class Root{ static { System.out.println("Root的静态初始化代码块"); } { System.out.println("Root的普通初始化代码块"); } public Root() { System.out.println("Root的无参数的构造器"); }}class Mid extends Root{ static { System.out.println("Mid的静态初始化代码块"); } { System.out.println("Mid的普通初始化代码块"); } public Mid() { System.out.println("Mid的无参数构造器"); } public Mid(String msg) { //通过this调用同一类中的重载构造器 //this(); System.out.println("Mid的带参数构造器,其参数值为:" + msg ); }}class Leaf extends Mid{ static { System.out.println("Leaf的静态初始化代码块"); } { System.out.println("Leaf的普通初始化代码块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("急速测试"); System.out.println("执行Leaf的构造器"); }}public class Test { public static void main(String [] args) { System.out.println("test"); new Leaf(); new Leaf(); }}代码输出如下testRoot的静态初始化代码块Mid的静态初始化代码块Leaf的静态初始化代码块Root的普通初始化代码块Root的无参数的构造器Mid的普通初始化代码块Mid的带参数构造器,其参数值为:急速测试Leaf的普通初始化代码块执行Leaf的构造器Root的普通初始化代码块Root的无参数的构造器Mid的普通初始化代码块Mid的带参数构造器,其参数值为:急速测试Leaf的普通初始化代码块执行Leaf的构造器问题1(此问题已经解决,谢谢)我粗略了解载入Leaf类的时候,会先创建父类(直至java.lang.Object)的初始化代码和构造器,那么他们的顺序是否如下:Root类静态初始化代码块-->Mid类静态初始化代码块-->Leaf类静态初始化代码块-->Root类普通初始化代码块-->Root类构造器-->...-->Leaf类Root类普通初始化代码块-->Leaf类的构造器问题2如果Leaf类的构造器的执行顺序在父类的构造器之后,那么为什么Mid类的有参数构造器已经被传入参数急速测试呢?可能描述得不是很清楚,如果有疑问请指出来,我会尽量描述清楚的感谢您抽空查看
添加回答
举报
0/150
提交
取消