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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Gaara 高级黑马   /  2013-3-7 13:58  /  3161 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看到个问题说  构造函数有没有返回值? 应该是没有的
但又有个例子:

  String str = new String("content");

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

有点蒙。。。。

有没有方法确定知道构造函数有没有返回??还是说就是没有。。。。没法验证

8 个回复

倒序浏览
实质上,类的构造函数是有返回值的,当我们用new关键字来调用构造函数时,构造函数是返回该类的实例,可以把这个类的实例当为构造函数的返回值,因为构造函数的返回值类型总是当前类,因此无须定义返回值类型。但必须注意:不能在构造函数中显示使用return来返回当前类的对象,因为构造函数的返回值是隐式的。

希望对你有所帮助。
回复 使用道具 举报
刚查了下定义,这个应该对你有帮助。:

构造方法是一种特殊的方法,具有以下特点。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)构造方法不能由编程人员调用,而要系统调用。
(5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构  造器,这个构造器不执行任何代码。
(6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。

回复 使用道具 举报
我倒觉得 是new命令的事情,  把对象引用返回。
回复 使用道具 举报
构造函数没有返回值,
  String str = new String("content");//java有String这个类,在者这个方法定义了两个对象,str指向了对象的引用,本来str指向第一个对象的引用,又把str的引用指向了第二个对象,那第一个对象在堆中就多开辟了下空间,所以一般建议用String str=null;这样定义,我研究的不是很深,希望能帮到您

回复 使用道具 举报
本帖最后由 韩松范 于 2013-3-7 16:21 编辑

在new对象的时候,其实不是先调用构造函数
而是先在内存中开辟空间(当然之前还有把.class文件加载进内存,还有执行静态代码块)
开辟完空间,分配地制值,在栈内存中开辟引用变量空间。
然后在对内存中建立对象的特有属性,进行默认初始化,接着再对属性进行显示初始化。
如果有构造代码块,还要进行构造代码块初始化
接着才会调用构造函数,对对象进行初始化,
也就是说构造函数,不是用来建立对象,而是用来对已经建立好的对象进行初始化。。。。。。。。
然后虚拟机会把,在堆内存开辟空间后分配到的地址值,传给栈内存中的引用变量。
所以String str = new String("content");中
str的值和调用到构造函数无关。

还记得那句说顺了的话吗?
对象一建立就会调用构造函数(所以构造函数可不是用来建立对象的。对象都已经建完了)
而不是构造函数一调用就会建立对象。。。。。。

点评

高见  发表于 2013-3-8 02:37
回复 使用道具 举报
首先构造函数是创建对象的,这么说好理解,有个Personl类,你创建一个 Person对象,这个对象难道是不人?对象是用来调用方法的。人有姓名,你要得到姓名,就要用对象调用获取姓名的方法,得到的姓名当然是字符串类型,所有姓名类型是String
回复 使用道具 举报
怎么有的都扯到new对象上去了。。。。。。。。  谢谢各位我明白了 还是我没把构造函数的定义理解好。。。。

评分

参与人数 1黑马币 +30 收起 理由
洪建超 + 30 偷偷给你转点金币,哈哈

查看全部评分

回复 使用道具 举报
袁见 发表于 2013-3-7 14:04
实质上,类的构造函数是有返回值的,当我们用new关键字来调用构造函数时,构造函数是返回该类的实例,可以 ...

说的很精辟学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马