黑马程序员技术交流社区
标题:
学到this有些迷茫,求解答
[打印本页]
作者:
贺奕凯
时间:
2013-10-28 21:07
标题:
学到this有些迷茫,求解答
本帖最后由 贺奕凯 于 2013-10-28 23:24 编辑
<p>class Person
{
private int age;
private String name;
//不同的构造函数(重构)
Person()
{
System.out.println("A: name="+name+",,age="+age);
}
Person(String name)
{
this();
this.name = name;
System.out.println("B: name="+name+",,age="+age);
}
Person(String name,int age)
{
//构造函数不能通过Person();来互相调用,而要同过以下方式
this(name);
this.age = age;
System.out.println("C: name="+name+",,age="+age);
}
}</p><p>public class Lei {</p><p> public static void main(String[] args) {
Person p1=new Person();
Person p2=new Person("zhang");
Person p3=new Person("zhang",20);
</p><p> }</p><p>}</p>
复制代码
看得是毕老师的视频,跟着写了写,加了printfln语句测试下输出,发现输出结果为:
A: name=null,,age=0
A: name=null,,age=0
B: name=zhang,,age=0
A: name=null,,age=0
B: name=zhang,,age=0
C: name=zhang,,age=20
复制代码
没太听懂{:soso_e150:}
作者:
回天之力
时间:
2013-10-28 21:37
必须是这样啊,
Person p1=new Person(); //这个会调用第一个构造函数,而name和age都没有赋值 所以A: name=null,,age=0
Person p2=new Person("zhang");//这个调用第二个构造函数Person(name),而它会先调用第一个构造函数,
//所以先出来A: name=null,,age=0,然后name赋值后输出B: name=zhang,,age=0
Person p3=new Person("zhang",20); //它先调用Person(),然后Person(name),然后才是第三个构造函数 所输出下面结果
A: name=null,,age=0
B: name=zhang,,age=0
C: name=zhang,,age=20
作者:
wuchuang1992
时间:
2013-10-28 21:46
this关键字:
.如果局部变量的名字与成员变量的名字相同,则成员变量被隐蔽。这是如果想 在该方法内使用成员变量,则必须使用关键字this
.当一个类不止一个构造函数,用this在一个构造函数中调用另一个构造函数
.将自己这个对象作为参数,传递给对象中的方法
作者:
mayor125
时间:
2013-10-28 21:58
本帖最后由 mayor125 于 2013-10-28 22:01 编辑
这个例子应该是讲了3个知识点(个人觉得):
1、对象一实例化,就调用与之对应的构造函数,并给对应的属性赋值(方法重载的问题就不多说了);
2、this()语句:this()语句只能放在构造函数的第一行;
3、构造函数之间的相互调用;
分析一下:
1、Person p1=new Person();这个对象一产生,就调用Person()这个空参数的构造函数,由于没有给对象传入任何参数内容,所以A:中name和age打印出来的都是默认值,即name=null;age=0;
2、Person p2=new Person("zhang");这个对象一产生,就调用Person(String name)这个有一个参数的构造函数,并传入一个String类型的值"zhang"给name,但是执行语句里面有this();这条语句,表示调用Person()这个空参数的构造函数,所以又把上面一步的A:的结果又打印输出了一遍之后,跟着输出B:的内容,即B: name=zhang,,age=0
3、Person p3=new Person("zhang",20);这个对象一产生,就调用与之对应的构造函数Person(String name,int age),因为传入了两个参数,对name和age都分别初始化值。而执行语句的第一行this(name);表示使用this方法调用第二个构造函数Person(String name),而第二个构造方法又通过this方法调用了第一个无参数的构造方法,所以又将第2步中的结果打印出来了(A:和B:),再输出第三个构造函数的结果(C:),所以最终的打印输出的结果就是你上面贴出来的那样了...
好吧,以上就是我的理解过程,希望能够帮到你,加油!
作者:
黄炳期
时间:
2013-10-28 22:24
如果问题已经解决,请及时修改主题至“提问结束”。
作者:
贺奕凯
时间:
2013-10-28 23:24
谢谢,懂了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2