黑马程序员技术交流社区

标题: 关于this() 的问题 [打印本页]

作者: 山水游客    时间: 2012-5-24 19:29
标题: 关于this() 的问题
为什么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);

}
作者:  夜风    时间: 2012-5-24 19:45
在构造器中是顺序执行的,你用2个this()电脑就不知道你调用的是哪个方法里的this了,
因为在一个构造函数中只能调用一个构造函数。

作者: 张晨    时间: 2012-5-24 20:07
第一、没有含有 int参数的构造器(Person (int age){} ),所以调用this.age()铁定会报错
第二、构造器只能调用一次、、、
作者: 龙秋地    时间: 2012-5-24 20:19
  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. }
复制代码
所以你就运行成功了!!
作者: 贾旭    时间: 2012-5-24 20:24
1.为什么this();只能用在构造函数第一行?
   this()是构造函数之间的调用,其实this()就是在调用本类构造函数。构造函数要先执行是因为里面定义了对成员的初始化值,如果构造函数后执行,我们的自定义值会被覆盖。
  2. “那this所在构造函数要对已构造函数多次引用呢?”
          不太明白你的意思
     3.this(name);//把两个this();的位置调换两个都报错,问为什么会这样?
        this(age);//这儿就报错了,为什么把这句注释掉,把this(name);改为this(name,age);就ok了?
        this()其实就是在调用本类的构造函数,this()只能在第一行。因为它要被先执行到。
        我试了一下,把this(age)注释掉,没有改this(name),并没有报错。
        




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