再论构造函数有没有返回值??

sure2003 2008-09-01 10:10:25
加精
我告诉他说:构造函数没有返回值。
他举了个反例:
String str = new String("content");

new 的时候调用构造函数,返回给str;

再问:有没有方法确定知道构造函数有没有返回??
...全文
10472 301 打赏 收藏 转发到动态 举报
写回复
用AI写文章
301 条回复
切换为时间正序
请发表友善的回复…
发表回复
myling_m428 2012-10-27
  • 打赏
  • 举报
回复
他的反例我是这么理解的
String str = new String("content");
new 的时候调用构造函数,返回给str;
这时候你理解的返回值是是默认调用了方法toString()得到的 return this;
所以我对他的反例理解为
String str=(new String("content")).toString();

  • 打赏
  • 举报
回复
没有返回值,只是值的引用
SpiderFZL 2012-07-19
  • 打赏
  • 举报
回复
没有没有没有,
gqy281615 2012-07-18
  • 打赏
  • 举报
回复
当然没返回值 String str = new String("df"); 是变量str 指向对象String类的内容
gqy281615 2012-07-18
  • 打赏
  • 举报
回复
当然没返回值 String str = new String("df"); 是变量str 指向对象String类的内容
gqy281615 2012-07-18
  • 打赏
  • 举报
回复
当然没返回值 String str = new String("df"); 是变量str 指向对象String类的内容
我为JAVA狂 2012-07-18
  • 打赏
  • 举报
回复
严格意义上来讲没有,硬说有的话也只是返回对象的引用 而不是值
wuxu01 2012-06-29
  • 打赏
  • 举报
回复
学习了
你好毒你好毒 2012-06-18
  • 打赏
  • 举报
回复
简单地说,这是Java的语法规定。实际上,类的构造器是有返回值的,当我们用new关键字来调用构造器时,构造器是返回该类的实例,可以把这个类的实例当为构造器的返回值,因此构造器的返回值类型总是当前类,因此无需显示的定义返回值类型。

结论:构造函数是有返回值的,但是是隐式的

--引用李刚老师的结论
「已注销」 2012-06-07
  • 打赏
  • 举报
回复
构造函数不用返回,因为他返回了一个类对象
Are 2012-03-15
  • 打赏
  • 举报
回复
这个问题我曾在《Java编程思想.Bruce.Eckel著》中看到过,具体是怎么解释的我也记不太清了,但最终证实确实构造函数没有返回值
k970192047 2011-09-29
  • 打赏
  • 举报
回复
我们要坚信 构造函数没有返回值
hw540_540 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cydp007 的回复:]
引用 18 楼 cydp007 的回复:
引用 17 楼 sure2003 的回复:
怎么样证明它是没有返回的???


如果有返回.那么肯定就要有 return.

你自己给构造方法里加一个return 试试就知道了.

它会提示你void 方法不能有返回值.

但是这里的void跟 你自己定义时候的 void 又不一样. 呵呵. 在讨论中学习.
[/Quote]

呵呵
czhc520 2011-06-10
  • 打赏
  • 举报
回复
我表示有压力呀!
对于new 我希望能明白它返回的是地址,不知道几楼的同学,应该是这样的吧
string * pstr = new string("kk");

另有几点我想说明一下,
在MFC中 CClientDC中有一个这样的函数 dc.fillRect(CRect(Point,Point),&brush);
第一个实参是否算的上的用户显示的调用构造函数呢。
对应的形参为指针 ,那这是否意味着,用户显示的调用构造函数,其效果是传递了一个指针呢,?
雨枫 2011-06-09
  • 打赏
  • 举报
回复
public String(String original) {
int size = original.count;
char[] originalValue = original.value;
char[] v;
if (originalValue.length > size) {
// The array representing the String is bigger than the new
// String itself. Perhaps this constructor is being called
// in order to trim the baggage, so make a copy of the array.
int off = original.offset;
v = Arrays.copyOfRange(originalValue, off, off+size);
} else {
// The array representing the String is the same
// size as the String, so no point in making a copy.
v = originalValue;
}
this.offset = 0;
this.count = size;
this.value = v;
}


源码中不是你说的返回值
Monkey_D_Luffy 2011-05-15
  • 打赏
  • 举报
回复

每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
crazypeas 2011-05-08
  • 打赏
  • 举报
回复
那个只是创建了 一个 "content" 对象然后 str去指向那兄弟把 我初学者是这么想的
lypx 2011-05-04
  • 打赏
  • 举报
回复
结论就是:

构造函数不能有返回类型,也不能由virtual, const, static 和 volatile来修饰。但可以由inline来修饰,事实上隐式构造函数就是用inline来修饰的。inline表示编译时展开,通常速度块;virtual表示运行时绑定,通常意味着灵活。
lypx 2011-05-04
  • 打赏
  • 举报
回复
c++定义一个空类时,系统会自动加上六个函数:
class Empty
{
public:
Empty(); // 缺省构造函数
Empty( const Empty& ); // 拷贝构造函数
~Empty(); // 析构函数
Empty& operator=( const Empty& ); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const; // const取址运算
};

string str = new string("content");
楼主的语句其实分解如下:
1、new string("content"),调用构造函数,产生一个临时无名对象。
2、=操作 调用赋值运算符,即把无名对象赋值给了str

fsg_21c_cn 2011-01-27
  • 打赏
  • 举报
回复
我下面的理解是基于C++语言的,Java的我不清楚。
String str = new String("content");
这个例子不能说明构造函数有返回值。
这个过程应该分成两步走,
1. new 操作调用内存分配函数,如malloc 来分配一段内存。
2. 调用构造函数对这段内存操作,实例化成一个对象。
构造函数本身并没有返回值,只是把那段内存变成了一个对象。
之后应该是new这个操作符把生成的对象返回给了 str。

比较赞同楼上的这个解释。
B *a = new B;
===>
B *a = (B *)malloc(sizeof(B));
a->B();
加载更多回复(281)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧