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

© 山水游客 中级黑马   /  2012-5-24 19:29  /  2350 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么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+"..."+age);
}
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);

}

5 个回复

倒序浏览
在构造器中是顺序执行的,你用2个this()电脑就不知道你调用的是哪个方法里的this了,
因为在一个构造函数中只能调用一个构造函数。
回复 使用道具 举报
第一、没有含有 int参数的构造器(Person (int age){} ),所以调用this.age()铁定会报错
第二、构造器只能调用一次、、、
回复 使用道具 举报
  1. Person(int age,String name,String occupation)
  2. {
  3. this(name);//把两个this();的位置调换两个都报错,问为什么会这样?
  4. this(age);//这儿就报错了,为什么把这句注释掉,把this(name);改为this(name,age);就ok了?
  5. this.occupation=occupation;
  6. System.out.println(name+"..." +age+"..."+occupation);

  7. }
复制代码
  1. this(name)
复制代码
这句话执行的是
  1. Person(String name)
  2. {
  3. this.name=name;
  4. System.out.println(name);
  5. }
复制代码
  1. this(age);//这儿就报错了,为什么把这句注释掉,把this(name);改为this(name,age);就ok了?
复制代码
这句代码中你所传的参数是age,但是你的类中没有参数为age的构造函数,所以首先你传参数就传不进去.
  1. this(name,age);
复制代码
这句代码有相应的构造函数:
  1. Person(String name,int age)
  2. {
  3. this.name=name;
  4. this.age=age;
  5. System.out.println(name+"..."+age);
  6. }
复制代码
所以你就运行成功了!!

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1.为什么this();只能用在构造函数第一行?
   this()是构造函数之间的调用,其实this()就是在调用本类构造函数。构造函数要先执行是因为里面定义了对成员的初始化值,如果构造函数后执行,我们的自定义值会被覆盖。
  2. “那this所在构造函数要对已构造函数多次引用呢?”
          不太明白你的意思
     3.this(name);//把两个this();的位置调换两个都报错,问为什么会这样?
        this(age);//这儿就报错了,为什么把这句注释掉,把this(name);改为this(name,age);就ok了?
        this()其实就是在调用本类的构造函数,this()只能在第一行。因为它要被先执行到。
        我试了一下,把this(age)注释掉,没有改this(name),并没有报错。
        
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马