黑马程序员技术交流社区

标题: 关于this的问题 [打印本页]

作者: EDDY_Liang    时间: 2014-5-27 10:53
标题: 关于this的问题
  1. class  person
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //new PersonDemo();
  6.                 PersonDemo p =new PersonDemo(5);
  7.                 //p.setAge(5);
  8.                 //PersonDemo.run();
  9.        
  10.                

  11.                                
  12.         }

  13. }


  14. class PersonDemo
  15. {
  16.        

  17.         private int age;
  18.         public void setAge(int age)    //我这里前面不加this,为什么还是能运行啊,毕老师不是说 成员变量跟局部变量同名时要加this以示区分吗??
  19.         {                                          //现在我的情况是加不加this都可以正常运行啊,大家看一下是什么问题。谢谢
  20.                 age = age;
  21.         }
  22.         String name ;
  23.        

  24.         PersonDemo()
  25.         {
  26.                 System.out.println("age="+age+"..."+"name="+name);
  27.         }
  28.         PersonDemo(String name)
  29.         {
  30.                 System.out.println("age="+age+"..."+"name="+name);       
  31.         }
  32.         PersonDemo(int age)
  33.         {
  34.                 System.out.println("age="+age+"..."+"name="+name);       
  35.         }
  36.        
  37.        
  38. }
复制代码

作者: yinxjfly    时间: 2014-5-27 11:15
系统会默认的认为等号左边的“age”是this.age
作者: 杨韬略    时间: 2014-5-27 11:25
本帖最后由 杨韬略 于 2014-5-27 11:28 编辑

解答:你的问题很简单,首先毕老师讲的没错的!
错误原因:你根本没调用setAge(int age) 方法!private int age;没被赋值!

class  ThisProblem

{

        public static void main(String[] args)
        {

                //new PersonDemo();

                PersonDemo p =new PersonDemo(5);//你调用的只是  PersonDemo(int age)这一个方法!

                //p.setAge(5);

                //PersonDemo.run();
}
}

class PersonDemo

{

        private int age;

        public void setAge(int age)    //我这里前面不加this,为什么还是能运行啊,毕老师不是说 成员变量跟局部变量同名时要加this以示区分吗??

        {                                          //现在我的情况是加不加this都可以正常运行啊,大家看一下是什么问题。谢谢

                age = age;//这两个age是同一个age

        }

        String name ;

        
//
//        PersonDemo()//这里没被调用的我先注释掉
//
//        {
//
//                System.out.println("age="+age+"..."+"name="+name);
//
//        }
//
//        PersonDemo(String name)
//
//        {
//
//                System.out.println("age="+age+"..."+"name="+name);        
//        }
//
        PersonDemo(int age)//你只是调用了这个方法而已!

        {

                System.out.println("age="+age+"..."+"name="+name);        
        }

        
        
}
作者: EDDY_Liang    时间: 2014-5-27 13:51
杨韬略 发表于 2014-5-27 11:25
解答:你的问题很简单,首先毕老师讲的没错的!
错误原因:你根本没调用setAge(int age) 方法!private int ...

PersonDemo(int age)
这个是对象初始化
创建新的对象p的时候不就调用了吗?
而这个PersonDemo(int age)方法里面前面的age不就调用了成员变量里的age变量吗??

还是不懂、、
应该怎么理解?

作者: EDDY_Liang    时间: 2014-5-27 13:53
杨韬略 发表于 2014-5-27 11:25
解答:你的问题很简单,首先毕老师讲的没错的!
错误原因:你根本没调用setAge(int age) 方法!private int ...

。、。。。我懂了。。。。。的初始化就是只调用了成员变量中的age,
所以跟setAge方法里面没关系。。。
谢谢、、
作者: 杨韬略    时间: 2014-5-27 19:28
EDDY_Liang 发表于 2014-5-27 13:53
。、。。。我懂了。。。。。的初始化就是只调用了成员变量中的age,
所以跟setAge方法里面没关系。。。
...

呵呵,不用谢
作者: yang1352546    时间: 2014-5-27 21:23
没有this的话,不管你给setAge()里面赋值是几,调用getAge()运行出来的的结果都是0。所以要是没有this,调用getAge()运行时肯定会出问题的。
作者: 小钟    时间: 2014-5-28 00:57
public void setAge(int age)   
{                                         
                age = age;//这两个age是同一个age,不是this.age.是将传递给形参的值有赋值给了形参变量age
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2