黑马程序员技术交流社区

标题: 静态变量的问题? [打印本页]

作者: 弘一    时间: 2013-12-12 21:04
标题: 静态变量的问题?
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的,那么现在应该如何解决?

作者: 一个人旅行    时间: 2013-12-12 21:12
代码太乱,没有面向对象的思想。先建对象,你看看下面的是不是你想表达的

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();
              
       }
}

作者: 潘金锋    时间: 2013-12-12 21:17
对类成员当然要用类名来引用
public static void setNum(int num)
         {
               Demo.num = num;
         }

这样就OK啦
作者: 松子    时间: 2013-12-12 21:42
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
       }
}


作者: 郭涛    时间: 2013-12-12 21:56
因为变量设置的是静态(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. }
复制代码

作者: 風諾    时间: 2013-12-12 22:09
楼上说的很清楚了
在某个范围内,变量名称有重名现象出现的时候,你需要指明某个变量是属于哪个类(静态变量)或者属于哪个对象(非静态变量)




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