黑马程序员技术交流社区

标题: 构造函数的初始化问题 [打印本页]

作者: 山水游客    时间: 2012-6-18 12:49
标题: 构造函数的初始化问题
class Person{
String name;
int age;
public Person(String name , int age ){
      this.name = name ;
      this.age = age ;
}
}
有个小疑问,构造函数式为对象初始化,为什么没有返回值呢?
作者: 陈嘉宾    时间: 2012-6-18 12:52
构造函数没有返回值。它们只初始化由this值传递进来的对象,而不返回任何东西。但是,构造函数允许返回一个对象值,如果这样做,被返回的对象即成为new表达式的值。
作者: 唐辉辉    时间: 2012-6-18 12:52
构造方法用于对对象进行初始化。如果要获取对象中的某个成员变量时,可以直接对象调用成员。一般成员会设为private私有,所以一般类内部会加getXxx()方法获取对象成员变量的值。
作者: 余银桂    时间: 2012-6-18 13:11
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值  
  总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.
构造函数与其他方法的区别:
       1.构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同.
  2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择.而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的.
  3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用.
  4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的.而一般方法不存在这一特点
作者: 胡大强    时间: 2012-6-18 13:16
这个。。先要了解构造函数。。。。
1.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰
2.一个类的构造函数的返回值的类型就是这个类本身
3.构造函数也不能被继承
作者: 陆强强    时间: 2012-6-18 13:17
构造函数初始化是对变量赋值
作者: 钟成军    时间: 2012-6-18 13:17
在java程序中,构造方法所完成的主要工作是帮助新创建的对象赋初值。
可将构造方法视为一种特殊的方法。在使用构造方法的时候需要注意以下两点:
1.它肯有与类名相同的名称。
2.它没有返回值。
构造方法调用的时机与一般的方法不同,一般的方法是在需要是才调用,而构造方法则是在创建对象时自动调用,并执行构造谅的内容。因此,构造方法无需在程序中直接调用,而是在对象产生时自动执行的。
作者: 李海晓    时间: 2012-6-18 13:25
本帖最后由 李海晓 于 2012-6-18 13:30 编辑

我想了一会,java程序设计是非常有道理的,我们可以反过来想,构造函数如果有返回值,你想下会怎么样,
构造函数的作用是初始化, 比如Person person=new Person("张三",22);
那么如果他有返回值 比如return age,那么,
当你new Person("张三",22);  必须写int num=new Person("张三",22);,应为你要返回值是吧,
那么你怎么来创建一个Person类的引用对象,应为现在Person person != new Person("张三",22);
那么当实例化一个对象时,你=号左边的类型选什么那???
作者: 常佳杰    时间: 2012-6-18 13:45
构造器的定义要求条件,就是要没有返回值的。
要有了返回值就必须有return,
简单的返回值是存在eax寄存器里的,结构体的话就是存在内存里了.....
要是想有return你得有返回的地址懂了吧?


作者: 余清兰    时间: 2012-6-18 13:56
构造函数作用是在类初始化的同时初始化一些变量或参数,不需要返回值;
就是new对象一建立,构造函数也随之运行了,自动给对象里的成员赋值的,
而一般函数必需要用对象去调用方法才会传递值给对象的成员,这就是构造函数与一般函数的区别。
作者: 黄奕豪    时间: 2012-6-18 14:44
我查了一下文档,还有百度了一下~~比较权威的说法是这样:Person p = new Preson("aa",25)的过程中,先通过new在内存中建立对象,然后再调用Person的构造方法来给这个新的对象起作用,也就是说之所以new Preson()语句会返回一个Person对象,是new的功劳,并不是Person后面的()"aa",25)构造函数的功劳。所以说构造函数是没有返回值的,是一种特殊的函数。上面的之所以给分,是因为他们都动脑筋思考了!!而不是百度拷贝~~希望大家不要误会~~
作者: 吴小东    时间: 2012-6-18 15:27
黄奕豪 发表于 2012-6-18 14:44
我查了一下文档,还有百度了一下~~比较权威的说法是这样:Person p = new Preson("aa",25)的过程中,先通过 ...

版主给力,我也想了半天,既然构造函数没有返回值,那么就没必要用一个对象去接受,
开始想的是可能是因为构造函数始终是返回一个本类对象所以系统自动做了处理,原来是new 的问题 学习了。
作者: 涂金哲    时间: 2012-6-18 15:52
构造器是一个特殊的方法,构造器不能定义返回值类型,不能用void定义。这可以理解为语法规定。当然,构造器是可以理解为有返回值。用new关键字调用类的构造器时,创建的类的实例就是构造器的返回值,这样理解也没问题。完全可以理解为构造器隐式的返回调用它的类的类型。只是不需要再显示声明。




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