黑马程序员技术交流社区

标题: 构造函数没有返回值的问题? [打印本页]

作者: Gaara    时间: 2013-3-7 13:58
标题: 构造函数没有返回值的问题?
今天看到个问题说  构造函数有没有返回值? 应该是没有的
但又有个例子:

  String str = new String("content");

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

有点蒙。。。。

有没有方法确定知道构造函数有没有返回??还是说就是没有。。。。没法验证
作者: scott0610    时间: 2013-3-7 14:04
实质上,类的构造函数是有返回值的,当我们用new关键字来调用构造函数时,构造函数是返回该类的实例,可以把这个类的实例当为构造函数的返回值,因为构造函数的返回值类型总是当前类,因此无须定义返回值类型。但必须注意:不能在构造函数中显示使用return来返回当前类的对象,因为构造函数的返回值是隐式的。

希望对你有所帮助。
作者: chuanyueing    时间: 2013-3-7 14:12
刚查了下定义,这个应该对你有帮助。:

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


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


作者: 移动小坦克    时间: 2013-3-7 15:39
本帖最后由 韩松范 于 2013-3-7 16:21 编辑

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

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


作者: 夏晓彤    时间: 2013-3-7 15:56
首先构造函数是创建对象的,这么说好理解,有个Personl类,你创建一个 Person对象,这个对象难道是不人?对象是用来调用方法的。人有姓名,你要得到姓名,就要用对象调用获取姓名的方法,得到的姓名当然是字符串类型,所有姓名类型是String
作者: Gaara    时间: 2013-3-7 20:50
怎么有的都扯到new对象上去了。。。。。。。。  谢谢各位我明白了 还是我没把构造函数的定义理解好。。。。
作者: 沈文杰    时间: 2013-3-7 22:05
袁见 发表于 2013-3-7 14:04
实质上,类的构造函数是有返回值的,当我们用new关键字来调用构造函数时,构造函数是返回该类的实例,可以 ...

说的很精辟学习了




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