第一次写文章,感觉好像小时候自己写qq空间的日志一样啊。emmm
本篇内容是关于java语言初始化时的构造方法的执行顺序, 我作为初学者,把自己理解题目后的想法然后po下来。
下面是一段示例代码
public class Ex{
public static void main(String[] args){
Fx f=new Fx(5);
}
Ex() {System.out.println(“Ex,no-args”);}
Ex(int i) {System.out.println(“Ex,int”);}
}
class Fx extends Ex
{
Fx() {
super();
System.out.println(“Fx,no-args”);}
Fx(int i){
this();
System.out.printl(“Fx,int”);
}}
看完以后 你们觉得它会输出什么呢?
原来会输出
Ex,no-args
Fx,no-args
Fx,int
这是为什么呢
这是因为当子类的构造方法没有调用父类的构造方法时,编译器才会默认地调用父类中无参数的构造方法。对本题而言,类中Fx调用了父类的构造方法,而Fx类中带参数的构造方法也通过调用无参数的构造方法间接调用了父类的构造方法,因此编译器不会在调用Fx类有参数的构造方法时再去调用父类的构造方法。在调用Fx f=new Fx(5)时,先调用Fx的构造方法,在这个方法中,首先调用无参数的构造方法,在无参数的构造方法中,首先调用父类的无参数的构造方法输出Ex,no-args,接着在类Fx无参数的构造方法中输出Fx,no-args,最后调用类Fx有参数的构造方法,输出Fx,int.