int num = 8;
{
System.out.println("cons code num = " + num);
}
Zi(){
System.out.println("cons function num = " + num);
}
void show(){
System.out.println("zi show num = " + num);//此处为什么是0
}
}
class Student{
public static void main(String[] args){
Zi z = new Zi();
}
}
(这段代码复制于http://bbs.itheima.com/forum.php ... mp;extra=#pid247419)
该代码的输出结果是
zi show num = 0
cons code num = 8
cons function num = 8
这个结果说明,父类的构造函数是优先于,构造代码块执行的
但是我们学习视频的时候我记得,老师说过,子类的构造函数里
其实第一行默认调用父类无参的构造函数,也就是省略了super()
但是如果super()真的是被封装到子类构造函数中,那么应该是
先执行构造代码快,再执行父类构造函数,再执行自己本身的构造函数阿
所以子类构造函数第一行隐藏了 super()这段代码的说法是不是错误的?
public SubClass(){
//super();这里就是隐含调用哈,必须是在第一行
num = 8;
num = 9;
System.out.println("init block");
num =10;
}
}
说到这你应该明白了吧!
其实构造块中的语句会被抽到构造函数中去执行,也就是说他们依然是在隐含调用父类构造函数之后才被执行!!!!!