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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class Person
  2. {
  3.         private String name;
  4.         private int age;

  5.         Person(){
  6.                
  7.         }

  8.         Person(String name){
  9.                
  10.                 this();
  11.                 //this.name=name;
  12.         }

  13.         Person(String name,int age){
  14.        
  15.                 //this.name=name;
  16.                 this(name);
  17.                 this.age=age;
  18.                 System.out.println("name="+name+"age="+age);
  19.         }
  20. }



  21. class PersonDemo4
  22. {
  23.         public static void main(String[] args)
  24.         {
  25.                 Person p=new Person("lisi",30);
  26.                 //Person p1=new Person("lisi2",36);
  27.                
  28.         }
  29. }
复制代码


参数("lisi",30)从主函数传递到构造函数
  1. Person(String name){
  2.                
  3.                 this();
  4.                 //this.name=name;
  5.         }
复制代码
之中,在这个函数又用this()调用了最上边的那个构造函数
  1. Person(){
  2.                
  3.         }
复制代码
为什么输出结果依然是name=lisi,age=30?不应该是name=null,age=30么?

5 个回复

倒序浏览
看这句话:
  1.   System.out.println("name="+name+"age="+age);
复制代码

这句话是在那个两个参数的构造方法里面的,你打印的不是实例变量的值,而是形参的值啊。
要想弄出你说的那种效果要这样写:
System.out.println("name="+this.name+"age="+this.age);
回复 使用道具 举报
System.out.println("name="+name+"age="+age);
这一句打印的是你传进的name和age 跟对象没有关系
System.out.println("name="+this.name+"age="+this.age);
你加上this就知道区别了
回复 使用道具 举报
Mr.Ni 发表于 2014-12-2 21:40
System.out.println("name="+name+"age="+age);
这一句打印的是你传进的name和age 跟对象没有关系
System ...

明白了,那是不是就是说,在构造函数之中打印,如果不加this的话,默认打印的就是形参的值?
回复 使用道具 举报
基本上是这样,变量是就近原则,当前有的就用当前的,当前没有的就用其它的
再函数有传入参数的时候就用传入参数的,
没有传入参数,比如你这句System.out.println("name="+name+"age="+age);
放在toString()里面,因为当前没有,所以就会找对象的,也就会自动添加this
回复 使用道具 举报
Mr.Ni 发表于 2014-12-2 22:07
基本上是这样,变量是就近原则,当前有的就用当前的,当前没有的就用其它的
再函数有传入参数的时候就用传 ...

soga~明白了,多谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马