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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刘孝波

黑马帝

  • 黑马币:0

  • 帖子:25

  • 精华:0

© 刘孝波 黑马帝   /  2011-12-10 10:36  /  2059 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 涧澜 于 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);

}

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 熊明春 于 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)方法,能够初始化了;

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
熊明春 发表于 2011-12-10 10:54
1)为什么this();只能用在构造函数第一行?因为在构造的时候先要将你初始化的值赋给类的成员变量,这个成员 ...

谢谢您的解答
回复 使用道具 举报
{:soso_e100:}
回复 使用道具 举报
你没有定义person(age)这个构造函数,所以this(age)找不到这个构造函数的
回复 使用道具 举报
李明 黑马帝 2011-12-10 13:15:29
地板
this语句只能定义在构造函数的第一行。因为初始化要先执行。
this语句在用于构造函数之间调用的时候,this调用语句初始化要先于函数本身的初始化动作,保证数据的初始化不出错。所以this语句只能放在第一行。
你的this(age);你都没有定义Person(int age)这个构造函数,所以你调用当然会出错。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

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

谢谢你的详细解答。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马