问题描述
classParent{publicStringname="父类";publicParent(){System.out.println("父类无参数构造函数");}publicParent(Stringname){this.name=name;System.out.println("父类有参数构造函数name:"+name);}static{System.out.println("父类静态初始化块");}{System.out.println("父类普通初始化块");}}classChildextendsParent{publicStringname;publicChild(){super("子类");System.out.println("子类的构造函数");}static{System.out.println("子类静态初始化块");}{System.out.println("子类普通的初始化块");}}/**父类静态初始化块子类静态初始化块父类普通初始化块@1:父类有参数构造函数name:子类@2:子类普通的初始化块子类的构造函数===================父类普通初始化块父类有参数构造函数name:子类子类普通的初始化块子类的构造函数*/newChild();System.out.println("===================");newChild();@1为什么会在@2前执行,不是先执行初始化块,然后再执行构造函数吗??
解决方案
本帖最后由 meoujb 于 2011-04-22 16:49:55 编辑
解决方案二:
父类的:父类普通初始化块@1:父类有参数构造函数name:子类子类的:@2:子类普通的初始化块子类的构造函数有哪里不对么。@1和@2一个是父类一个是子类
解决方案三:
在java中static静态块里的东西是编译的时候就执行的所以肯定在最前面先父类在子类而后执行父类的初始化块父类的构造方法子类的初始化块子类的构造方法就是这样的一个顺序楼主有什么不明白的吗
解决方案四:
引用1楼lrbyantai的回复:
父类的:父类普通初始化块@1:父类有参数构造函数name:子类子类的:@2:子类普通的初始化块子类的构造函数有哪里不对么。@1和@2一个是父类一个是子类
static静态块里的东西是初始化类的时候执行的,不是编译的时候