黑马程序员技术交流社区

标题: 对象初始化顺序问题 [打印本页]

作者: sam9204    时间: 2014-6-9 22:50
标题: 对象初始化顺序问题
本帖最后由 sam9204 于 2014-6-10 22:45 编辑

下面是PeopleChild类的定义和构造方法,每个构造方法都输出编号。在执行new Child("mike")的时候都有哪些构造方法被顺序调用输出结果是什么?
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 = new People();
       static People f2 = new People("1");
       public Child(String name) {
              System.out.print(3);
              this.name = name;
              father = new People(name + ":F");
       }
       public Child(){ System.out.print(4); }
}
最后输出结果是:21132。但不知其所以然,请高手帮我分析一下具体的对象初始化顺序,谢谢。修正了一下答案应该是21132

作者: shisishishisi    时间: 2014-6-9 23:07
这代码贴的。。。果断看不懂
作者: xp8812    时间: 2014-6-9 23:12
本帖最后由 xp8812 于 2014-6-9 23:18 编辑

能看下你的主函数是如何调用的吗?,你的代码是从哪里复制过来的这么多的错误你没检查吗?
作者: sam9204    时间: 2014-6-10 08:49
shisishishisi 发表于 2014-6-9 23:07
这代码贴的。。。果断看不懂

请先看题目,谢谢
作者: sam9204    时间: 2014-6-10 08:51
xp8812 发表于 2014-6-9 23:12
能看下你的主函数是如何调用的吗?,你的代码是从哪里复制过来的这么多的错误你没检查吗? ...

这是一道面试题,题目已经说明----在执行new Child("mike")的时候都有哪些构造方法被顺序调用
作者: shisishishisi    时间: 2014-6-10 10:11
本帖最后由 shisishishisi 于 2014-6-10 10:12 编辑
sam9204 发表于 2014-6-10 08:49
请先看题目,谢谢

现在比之前贴的好多了
分析:
首先你的static People f2 = new People("1");是静态的,也就是说不管你是创建什么参数的Child对象,这个静态变量都是先加载的,所以当类第一次加载的时候必然先输出的是2,
PS:你可以用
new Child();//2114
new Child("mike");//1132,因为Child类已经加载,静态变量f2已经存在
和单独用:
new Child("mike");//21132
来验证
然后才轮到:People father = new People();
这里调用People的空参数构造函数输出1没什么好说的

接下来:
public Child(String name) {
                    //super();
           System.out.print(3);
           this.name = name;
           father = new People(name + ":F");
    }
只要知道每个构造函数第一行都有一个隐式的super();语句就不难理解了

最后调用People的带参数构造方法输出2
over


作者: sam9204    时间: 2014-6-10 22:44
shisishishisi 发表于 2014-6-10 10:11
现在比之前贴的好多了
分析:
首先你的static People f2 = new People("1");是静态的,也就是说不管你是创 ...

嗯,基本搞定了,之前就是忘了有这个(每个构造函数第一行都有一个隐式的super();),谢谢啦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2