黑马程序员技术交流社区

标题: 构造函数和return语句 [打印本页]

作者: 郝九凤    时间: 2014-7-19 14:12
标题: 构造函数和return语句
构造函数中可以写return语句吗?。如果写了return语句,例如:
class Person
{
Person()
{
return;
}
}
我在eclipse中尝试过,可以,没报错,这个意思是不是说,程序在构造实例对象的时候还没构造成功结束函数了?这种理解正确吗?希望得到更加具备权威性的回答!
作者: 李云贵    时间: 2014-7-19 14:23
Person()
{
return;
}
从构造函数定义就知道构造函数是无返回值的,所以不需要return。
楼主问的 程序在构造实例对象的时候还没构造成功结束函数了?
实例对象已经构造成功,不相信可以在return上面写一个输出语句,把实例对象toString,然后输出。
另外,你即使定义一个方法内容为空的构造函数,也可以成功构造实例对象。
你在构造函数最后加上return,返回空值毫无意义,因为函数执行到最后,就是返回了。
懂汇编的话你会发现每个方法最后系统都会自动ret返回的。
作者: 李云贵    时间: 2014-7-19 14:24
希望楼主能给分,准备42期中,技术分数不够
作者: fantacyleo    时间: 2014-7-19 14:33

1. 你就算不写return,生成的字节码文件也会加上一句return,下图就是Person类字节码文件反编译出来的结果:

这个return实际上就是回到你new对象的那条语句处。对象创建过程是这样的:
  1. Person p = new Person();
复制代码

new运算符在堆内存中开辟空间,存放Person对象。然后去调用你指定的Person构造函数,执行完构造函数后回到new语句处。此时new出来的空间已经初始化完毕,可以提供给程序使用了,于是就把对象在堆中的地址返回给引用类型变量p。

2. 你在Person()中自己加入return,那么执行到return处就返回了。至于此时初始化是否算成功,JVM不清楚,是由程序员根据需要自己判断的。但是,在return语句后还有代码,这显然是逻辑错误,所以eclipse会将其视为编译错误。

作者: 乐此不疲    时间: 2014-7-19 18:20
构造函数没有返回值啊
作者: 郝九凤    时间: 2014-7-19 20:43
李云贵 发表于 2014-7-19 14:23
Person()
{
return;

技术分可以在论坛发表问题和回答问题来获得,我给不了你技术分呀!都是这样过来的,没有捷径
作者: 想做开发    时间: 2014-7-19 21:35
李云贵 发表于 2014-7-19 14:24
希望楼主能给分,准备42期中,技术分数不够

42期什么时候啊




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