调用构造方法的问题?
还有0人有此问题
发表在Java视频课程答疑 2017-06-20
是否精华
版块置顶:


public class OutClass {


class innerClass {


innerClass() {

System.out.println("我是innerClass的构造方法innerClass()");

}


public void inf() {

System.out.println("我是innerClass的成员方法inf()");

}


int y = 0;

}


OutClass() {

innerClass in = new innerClass();

System.out.println("outClass的构造方法");

}


public innerClass doit() {

System.out.println("调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象");

return null;


}


public static void main(String[] args) {

OutClass out = new OutClass();

System.out.println("------------------");

OutClass.innerClass in1 = out.doit();

OutClass.innerClass in2 = out.new innerClass();


}


}

输出结果:



我是innerClass的构造方法innerClass()

outClass的构造方法

------------------

调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象

我是innerClass的构造方法innerClass()



这很好理解,OutClass out = new OutClass();这句代码 实例化对象时运行了innerClass in = new innerClass();而这是又调用了innerClass 的构造方法

所以-------------上面的结果是:



我是innerClass的构造方法innerClass()

outClass的构造方法



当我改动 innerClass in = new innerClass();位置,代码如下:


public class OutClass {

innerClass in = new innerClass();


class innerClass {


innerClass() {

System.out.println("我是innerClass的构造方法innerClass()");

}


public void inf() {

System.out.println("我是innerClass的成员方法inf()");

}


int y = 0;

}


OutClass() {


System.out.println("outClass的构造方法");

}


public innerClass doit() {

System.out.println("调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象");

return null;


}


public static void main(String[] args) {

OutClass out = new OutClass();

System.out.println("------------------");

OutClass.innerClass in1 = out.doit();

OutClass.innerClass in2 = out.new innerClass();


}


}

此时 innerClass in = new innerClass();变成外部类的成员变量,这时 OutClass out = new OutClass();实例化的时候,OutClass()构造方法中只有

System.out.println("outClass的构造方法");这一句

为什么输出结果不变,还是:



我是innerClass的构造方法innerClass()

outClass的构造方法

------------------

调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象

我是innerClass的构造方法innerClass()




innerClass in = new innerClass();这句代码是何时运行的?

注释这句代码,输出结果就正常了:



outClass的构造方法

------------------

调用外部内OutClass的doit()方法,返回一个内部类innerClass的对象

我是innerClass的构造方法innerClass()



2017-06-20 20:26:15编辑
分享到:
精彩评论 4
David
学分:914 LV7
TA的每日心情
最后的冲刺
2017-07-15 10:46:08
2017-06-21
沙发

把innerClass in = new innerClass();变成外部类的成员变量后,程序的执行顺序是OutClass out = new OutClass(); → 构造方法OutClass() → innerClass in = new innerClass(); → 构造方法innerClass() → 构造方法innerClass()中的输出语句 → 构造方法OutClass()中的输出语句……

17625087881
学分:42 LV2
2017-06-21
板凳

David 发表于2017-06-21 16:49

把innerClass in = new innerClass();变成外部类的成员变量后,程序的执行顺序是OutClass out = new OutClass(); → 构造方法OutClass() → innerClass in = new innerClass(); → 构造方法innerClass() → 构造方法innerClass()中的输出语句 → 构造方法OutClass()中的输出语句……

我也觉得是这个顺序,可是输出结果的第一行是

     我是innerClass的构造方法innerClass()

David
学分:914 LV7
TA的每日心情
最后的冲刺
2017-07-15 10:46:08
2017-06-22
地板

读者再看一下上面的执行顺序,或者使用Debug As运行一下。读者会发现,程序执行到构造方法OutClass()时,并没有继续执行构造方法OutClass()中的输出语句,而是去执行语句innerClass in = new innerClass(),这就是输出结果第一行是“ 我是innerClass的构造方法innerClass()”的原因。

17625087881
学分:42 LV2
2017-06-22
4L

David 发表于2017-06-22 17:10

读者再看一下上面的执行顺序,或者使用Debug As运行一下。读者会发现,程序执行到构造方法OutClass()时,并没有继续执行构造方法OutClass()中的输出语句,而是去执行语句innerClass in = new innerClass(),这就是输出结果第一行是“ 我是innerClass的构造方法innerClass()”的原因。

懂了,谢谢。

首页上一页 1 下一页尾页 4 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照