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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝九凤 中级黑马   /  2014-7-19 14:12  /  1947 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

构造函数中可以写return语句吗?。如果写了return语句,例如:
class Person
{
Person()
{
return;
}
}
我在eclipse中尝试过,可以,没报错,这个意思是不是说,程序在构造实例对象的时候还没构造成功结束函数了?这种理解正确吗?希望得到更加具备权威性的回答!

6 个回复

倒序浏览
Person()
{
return;
}
从构造函数定义就知道构造函数是无返回值的,所以不需要return。
楼主问的 程序在构造实例对象的时候还没构造成功结束函数了?
实例对象已经构造成功,不相信可以在return上面写一个输出语句,把实例对象toString,然后输出。
另外,你即使定义一个方法内容为空的构造函数,也可以成功构造实例对象。
你在构造函数最后加上return,返回空值毫无意义,因为函数执行到最后,就是返回了。
懂汇编的话你会发现每个方法最后系统都会自动ret返回的。
回复 使用道具 举报
希望楼主能给分,准备42期中,技术分数不够
回复 使用道具 举报

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

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

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

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

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
构造函数没有返回值啊
回复 使用道具 举报
李云贵 发表于 2014-7-19 14:23
Person()
{
return;

技术分可以在论坛发表问题和回答问题来获得,我给不了你技术分呀!都是这样过来的,没有捷径
回复 使用道具 举报
李云贵 发表于 2014-7-19 14:24
希望楼主能给分,准备42期中,技术分数不够

42期什么时候啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马