A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sam9204 中级黑马   /  2014-6-9 22:50  /  1986 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

6 个回复

倒序浏览
这代码贴的。。。果断看不懂
回复 使用道具 举报
本帖最后由 xp8812 于 2014-6-9 23:18 编辑

能看下你的主函数是如何调用的吗?,你的代码是从哪里复制过来的这么多的错误你没检查吗?
回复 使用道具 举报
shisishishisi 发表于 2014-6-9 23:07
这代码贴的。。。果断看不懂

请先看题目,谢谢
回复 使用道具 举报
xp8812 发表于 2014-6-9 23:12
能看下你的主函数是如何调用的吗?,你的代码是从哪里复制过来的这么多的错误你没检查吗? ...

这是一道面试题,题目已经说明----在执行new Child("mike")的时候都有哪些构造方法被顺序调用
回复 使用道具 举报
本帖最后由 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

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
shisishishisi 发表于 2014-6-10 10:11
现在比之前贴的好多了
分析:
首先你的static People f2 = new People("1");是静态的,也就是说不管你是创 ...

嗯,基本搞定了,之前就是忘了有这个(每个构造函数第一行都有一个隐式的super();),谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马