为了账号安全,请及时绑定邮箱和手机立即绑定

java构造方法顺序问题?

java构造方法顺序问题?

神不在的星期二 2019-02-07 15:07:40
下面是People和Child类的定义和构造方法,每个构造方法都输出编号。在执行new Child("mike")的时候都有哪些构造方法被顺序调用?请选择输出结果 ( D ) class People { String name; public People() { System.out.print(1); } public People(String name) { System.out.print(2); this.name = name; } } class Child extends People { People father; public Child(String name) { System.out.print(3); this.name = name; father = new People(name + ":F"); } public Child(){ System.out.print(4); } } A)312 B) 32 C) 432 D) 132 
查看完整描述

4 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

java中的构造方法调用顺序问题,举例如下:
public class Son extends Father {
SonProp r = new SonProp();
public Son() {
System.out.println("Son is construct");
}
public static void main(String[] args) {
new Son();
}
}
class Father {
FatherProp SonProp = new FatherProp();
public Father() {
System.out.println("Father is construct");
}
}
class SonProp {
public SonProp() {
System.out.println("SonProp is construct");
}
}
class FatherProp {
public FatherProp() {
System.out.println("FatherProp is construct");
}
}
执行结果如下:
FatherProp is construct
Father is construct
SonProp is construct
Son is construct
由此看出java类初始化时构造函数调用顺序:
(1)初始化对象的存储空间为零或null值;
(2)按顺序分别调用父类成员变量和实例成员变量的初始化表达式;
(3)调用父类构造函数;(如果实用super()方法指定具体的某个父类构造函数则使用指定的那个父类构造函数)
(4)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
(5)调用类本身构造函数。



查看完整回答
反对 回复 2019-03-19
?
翻阅古今

TA贡献1780条经验 获得超5个赞

子类实例化的时候会先调用父类的构造函数,然后才调用子类的构造函数。
所以一般在子类的构造函数中第一条语句就是调用父类构造函数,不过如果你没有在第一条语句显示地调用父类构造函数,那名JAVA会 自动先调用父类的默认无参构造函数,当然这种情况下,你得保证父类必须有无参构造函数。

所以new Child("mike")时会先调用父类无参的构造函数,public People() { System.out.print(1); }

然后执行子类自己的构造函数里的内容,得到结果是 1 3 2...

查看完整回答
反对 回复 2019-03-19
  • 4 回答
  • 0 关注
  • 658 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信