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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 弘一 中级黑马   /  2013-12-12 21:04  /  1181 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{
         static int num;
         public static void setNum(int num)
         {
               num = num;
         }
        public static void show()
        {
             System.out.println(num);
        }
}
class Test
{
       public static void main(String[] args)
       {
           System.out.println(Demo.num);
           Demo.setNum(3);
           Demo.show();
       }
}

请问this是解决局部变量隐藏成员变量,现在在public static void setNum方法中是不能使用this的,那么现在应该如何解决?

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

5 个回复

倒序浏览
代码太乱,没有面向对象的思想。先建对象,你看看下面的是不是你想表达的

class Demo
{
          int num;
         public  void setNum(int num)
         {
               this.num = num;
         }
        public  void show()
        {
             System.out.println(this.num);
        }
}
class Test
{
       public static void main(String[] args)
       {
                   Demo t = new Demo();
           //System.out.println(.num);
           t.setNum(3);
           t.show();
              
       }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
对类成员当然要用类名来引用
public static void setNum(int num)
         {
               Demo.num = num;
         }

这样就OK啦

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
class Demo
{
         static int num;
         public static void setNum(int num)
         {
               Demo.num = num; //静态变量使用的时候可以直接用类名代替this
         }
        public static void show()
        {
             System.out.println(num);
        }
}
class Test
{
       public static void main(String[] args)
       {
           System.out.println(Demo.num);   
//这里输出的时侯还没有给num赋值,初始化是0,所以结果是0.
           Demo.setNum(3);   
//这里给setNum中的变量赋值,然后num又把值赋给成员变量num
           Demo.show();   
//这里输出结果是3
       }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
因为变量设置的是静态(static)的,所以无法用this来指向num。
但是静态的变量和方法都可以用 类目.变量/类目.方法名调用,所以直接用下面的代码就可以解决
  1. class Demo
  2. {
  3.        public static void main(String[] args)
  4.        {
  5.            Test d = new Test();
  6.                    d.setNum(10);
  7.                    d.show();
  8.        }
  9. }
  10. class Test
  11. {
  12.          static int num;
  13.          public static void setNum(int num)
  14.          {
  15.                Test.num = num;
  16.          }
  17.         public static void show()
  18.         {
  19.              System.out.println(num);
  20.         }
  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
楼上说的很清楚了
在某个范围内,变量名称有重名现象出现的时候,你需要指明某个变量是属于哪个类(静态变量)或者属于哪个对象(非静态变量)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马