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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 十七 中级黑马   /  2014-3-13 23:00  /  1232 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 十七 于 2014-3-14 09:44 编辑

this关键字,可以区分成员变量和局部变量。可是,为什么下面的DayTest1.java中,不用this,,也可以正确输出对象的值。而DayTest2.java却要用this才可以。这是什么原因?
  1. /*
  2. 关键字this的应用
  3. */
  4. class Person
  5. {
  6.         private int age;
  7.         private String name;
  8.         Person(int age)     //为什么不用this关键字,也可以正确的赋值给对应对象
  9.         {
  10.                 age=age;
  11.                 System.out.println("age="+age);
  12.         }
  13.         Person(String name,int age)
  14.         {
  15.                 name=name;
  16.                 age=age;
  17.                 System.out.println("A:name="+name+",,,,age="+age);
  18.         }
  19.         
  20. }
  21. class DayThis1
  22. {
  23.         
  24.         
  25.         
  26.         public static void main(String[] args)
  27.         {
  28.                 Person p=new Person(21);
  29.                 Person p1=new Person("kai",21);
  30.         }
  31. }
  32. --------------------------------------------
  33. /*
  34. 关键字this的应用
  35. */
  36. class Person
  37. {
  38.         private int age;
  39.         private String name;
  40.         Person(int age)     //为了变量读的有意义,局部变量与成员变量同名,此时,用this区分
  41.         {
  42.                 this.age=age;
  43.         }
  44.         Person(String name,int age)
  45.         {
  46.                 this.name=name;
  47.                 this.age=age;
  48.                
  49.         }
  50.         public void speak()
  51.         {
  52.                 System.out.println("A:name="+name+",,,,age="+age);
  53.         }
  54. }
  55. class DayThis2
  56. {
  57.         
  58.         
  59.         
  60.         public static void main(String[] args)
  61.         {
  62.                 Person p=new Person(21);
  63.                 p.speak();
  64.                 Person p1=new Person("kai",21);
  65.                 p1.speak();
  66.         }
  67. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 房建斌 于 2014-3-13 23:22 编辑

直接看代码,你的第一段代码根本没有给成员变量赋值,知识把值赋给了局部变量。你打印成员变量就会发现其值为0.你这么写只是编译器没有报错,这么写毫无意义的。
  1. class Person
  2. {
  3.         private int age;
  4.         private String name;
  5.         Person(int age)     //为什么不用this关键字,也可以正确的赋值给对应对象
  6.         {
  7.                 age=age;
  8.                 System.out.println("age="+age);//此处打印的知识局部变量
  9.                 System.out.println("age="+this.age);//此处打印的是成员变量,默认为零,
  10.         }
  11.         Person(String name,int age)
  12.         {
  13.                 name=name;
  14.                 age=age;
  15.                 System.out.println("A:name="+name+",,,,age="+age);
  16.                 System.out.println("A:name="+this.name+",,,,age="+this.age);
  17.         }
  18.         
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
在第一程序中的构造方法中加入了语句System.out.println(this.name);运行后输出null,赋值式子中的age只是形参,形参赋值给形参,this.age还是默认值null,打印语句打印的是形式参数传递过来的值
第二个程序不用this.age也是可以的输出是A:name=null,,,,age=0 A:name=null,,,,age=0
回复 使用道具 举报
房建斌 发表于 2014-3-13 23:20
直接看代码,你的第一段代码根本没有给成员变量赋值,知识把值赋给了局部变量。你打印成员变量就会发现其值 ...

就是说DayThis1.java中,定义的成员变量根本没意义了是吗?
回复 使用道具 举报
焚雨成灰 发表于 2014-3-13 23:24
在第一程序中的构造方法中加入了语句System.out.println(this.name);运行后输出null,赋值式子中的age只是 ...

嗯,应该把成员变量的值输出就可以清楚比较了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马