黑马程序员技术交流社区

标题: this() [打印本页]

作者: 刘孝波    时间: 2011-12-10 10:36
标题: this()
本帖最后由 涧澜 于 2011-12-10 16:20 编辑

  为什么this();只能用在构造函数第一行?那this所在构造函数要对已构造函数多次引用呢?形如:
class Person
{
private int age;
private String name;
private String occupation;
Person(String name)
{
this.name=name;
System.out.println(name);
}
Person(String name,int age)
{
this.name=name;
this.age=age;
System.out.println(name+"..."+gae);
}
Person(int age,String name,String occupation)
{
this(name);//把两个this();的位置调换两个都报错,问为什么会这样?
this(age);//这儿就报错了,为什么把这句注释掉,把this(name);改为this(name,age);就ok了?
this.occupation=occupation;
System.out.println(name+"..." +age+"..."+occupation);

}
作者: 小春同学    时间: 2011-12-10 10:54
本帖最后由 熊明春 于 2011-12-10 11:02 编辑

1)为什么this();只能用在构造函数第一行?因为在构造的时候先要将你初始化的值赋给类的成员变量,这个成员变量有了值之后,你才能够有效输出这个属性值;
2)两个this();的位置调换两个都报错?因为你之前并没有定义一个Person(int age)的构造函数,this(age)根本不知道该调用哪个方法;
                 然后构造函数的调用必须是在构造函数的第一个声明,是规定,所以实际上一个构造函数只能调用一次已有的构造方法
3)为什么把这句注释掉,把this(name);改为this(name,age);就ok了?原理同上,因为你之前已经定义好了Person(String name,int age)方法,能够初始化了;
作者: 刘孝波    时间: 2011-12-10 11:01
熊明春 发表于 2011-12-10 10:54
1)为什么this();只能用在构造函数第一行?因为在构造的时候先要将你初始化的值赋给类的成员变量,这个成员 ...

谢谢您的解答
作者: 马伟奇    时间: 2011-12-10 11:24
{:soso_e100:}
作者: 方书堂    时间: 2011-12-10 12:23
你没有定义person(age)这个构造函数,所以this(age)找不到这个构造函数的
作者: 李明    时间: 2011-12-10 13:15
this语句只能定义在构造函数的第一行。因为初始化要先执行。
this语句在用于构造函数之间调用的时候,this调用语句初始化要先于函数本身的初始化动作,保证数据的初始化不出错。所以this语句只能放在第一行。
你的this(age);你都没有定义Person(int age)这个构造函数,所以你调用当然会出错。

作者: 李明    时间: 2011-12-10 13:17
你可以去看一下毕老师基础视频第5天-12,讲的很详细。
作者: 刘孝波    时间: 2011-12-10 16:14
熊明春 发表于 2011-12-10 10:54
1)为什么this();只能用在构造函数第一行?因为在构造的时候先要将你初始化的值赋给类的成员变量,这个成员 ...

谢谢你的详细解答。




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