黑马程序员技术交流社区
标题:
关于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
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);
}
复制代码
this(name)
复制代码
这句话执行的是
Person(String name)
{
this.name=name;
System.out.println(name);
}
复制代码
this(age);//这儿就报错了,为什么把这句注释掉,把this(name);改为this(name,age);就ok了?
复制代码
这句代码中你所传的参数是age,但是你的类中没有参数为age的构造函数,所以首先你传参数就传不进去.
this(name,age);
复制代码
这句代码有相应的构造函数:
Person(String name,int age)
{
this.name=name;
this.age=age;
System.out.println(name+"..."+age);
}
复制代码
所以你就运行成功了!!
作者:
贾旭
时间:
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