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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贺奕凯 中级黑马   /  2013-10-28 21:07  /  1198 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贺奕凯 于 2013-10-28 23:24 编辑
  1. <p>class Person
  2. {
  3. private int age;
  4. private String name;

  5. //不同的构造函数(重构)
  6. Person()
  7. {
  8.   System.out.println("A: name="+name+",,age="+age);
  9. }
  10. Person(String name)
  11. {
  12.   this();
  13.   this.name = name;
  14.   System.out.println("B: name="+name+",,age="+age);
  15. }
  16. Person(String name,int age)
  17. {
  18.   //构造函数不能通过Person();来互相调用,而要同过以下方式
  19.   this(name);
  20.   this.age = age;
  21.   System.out.println("C: name="+name+",,age="+age);
  22. }
  23. }</p><p>public class Lei {</p><p> public static void main(String[] args) {
  24.         Person p1=new Person();
  25.         Person p2=new Person("zhang");
  26.         Person p3=new Person("zhang",20);
  27.         </p><p> }</p><p>}</p>
复制代码
看得是毕老师的视频,跟着写了写,加了printfln语句测试下输出,发现输出结果为:
  1. A: name=null,,age=0
  2. A: name=null,,age=0
  3. B: name=zhang,,age=0
  4. A: name=null,,age=0
  5. B: name=zhang,,age=0
  6. C: name=zhang,,age=20
复制代码
没太听懂{:soso_e150:}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 鼓励新人~

查看全部评分

5 个回复

倒序浏览
必须是这样啊,
        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

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
this关键字:
  .如果局部变量的名字与成员变量的名字相同,则成员变量被隐蔽。这是如果想 在该方法内使用成员变量,则必须使用关键字this
  .当一个类不止一个构造函数,用this在一个构造函数中调用另一个构造函数
  .将自己这个对象作为参数,传递给对象中的方法

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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:),所以最终的打印输出的结果就是你上面贴出来的那样了...


好吧,以上就是我的理解过程,希望能够帮到你,加油!

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 很详细

查看全部评分

回复 使用道具 举报
如果问题已经解决,请及时修改主题至“提问结束”。
回复 使用道具 举报
谢谢,懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马