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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 方超 中级黑马   /  2013-11-1 17:07  /  660 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 方超 于 2013-11-1 17:44 编辑

class Person
{
        private int age;
        public  void setAge(int a)
        {
            int age = a;
                show();
        }
        public int getAge()
        {
                return age;
        }
        void show()
        {
                System.out.println(age);
        }
}
class PersonDemo
{
        public static void main(String[] args)
        {
                Person p = new Person();
                p.setAge(2);               
        }
}
打印输出结果为默认的0
在setAge()中,把int age = a 改为 age = a;则输出为2,请问这是为什么?int age = 0和 age = 0 有什么区别

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

倒序浏览
  1. class Person
  2. {
  3.         private int age;



  4.         public  void setAge(int a)
  5.         {
  6.            int age = a;             /* 这涉及到变量作用域的问题,如果这里写上int 等于在本方法内重新定义了一个
  7.                          age局部变量,无法把值传给方法外部的成员变量,这个局部变量和外部的  age同名,但只有在本方法有效
  8.                        而这里的show();实际上是this.show();简写是指方法所在类的整个类对象 */
  9.                 show();     
  10.         }
  11.         public int getAge()
  12.         {
  13.                 return age;
  14.         }
  15.         void show()                //public  void setAge(int a) 调用的是此方法,而此方法输出的是   private int age;

  16.         {
  17.                 System.out.println(age); //   输出private int age;  程序初化时, 整型变量默认值为0

  18.         }
  19. }
  20. class PersonDemo
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 Person p = new Person();
  25.               p.setAge(2);               
  26.         }
  27. }
复制代码
当去掉int 时,方法内的age 和方法外的age是同一个所以值发生了变化

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
成员变量定义了 int age, 局部变量再不能那样定义了, 一般可以这样写 this.age = a;
回复 使用道具 举报
int age: 新建一个变量,在本方法体中覆盖同名全局变量
age:this.age 使用全局变量
回复 使用道具 举报
魏-玉-彪 发表于 2013-11-1 17:35
当去掉int 时,方法内的age 和方法外的age是同一个所以值发生了变化

哦~明白了 谢谢!
回复 使用道具 举报
立丶青 发表于 2013-11-1 17:35
成员变量定义了 int age, 局部变量再不能那样定义了, 一般可以这样写 this.age = a; ...

谢谢!~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马