日期:2014-05-20  浏览次数:20792 次

一个超基础,但是不知道为什么
class   Test{

      int   i   =   0;  

      public   static   void   main(String[]   args){
int   i   =   2;
System.out.println(i);
      }
}

输出的局部变量i     而不是全局变量i     为什么?

------解决方案--------------------
Java是这样规定的.
------解决方案--------------------
被覆盖了了
使用的是最里面的变量
------解决方案--------------------
Java遵循就近原则!!!
------解决方案--------------------
局部变量隐藏了实例变量,而且实例变量必须通过对象引用来调用

例如:new Test().i;
或者
Test t = new Test();
t.i


------解决方案--------------------
变量作用域的原因 java遵循小作用域大于大作用域的原则

会先输出局部变量 而不是成员变量 如果想输出成员变量用this.i
------解决方案--------------------
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,则这个成员变量在这个方法中暂时失效
------解决方案--------------------
我怀疑你学过吗。》》》??????
------解决方案--------------------
zhaoxinmao() ( ) 信誉:100 Blog

耐心,hehe

------解决方案--------------------
补充一下子,你的程序里面main()是static方法是不能直接调用实例变量的
要用
new Test().i;
或者
Test t = new Test();
t.i
这样才能调用实力变量i

楼上这个是正解

------解决方案--------------------
變量優先級得考慮進去,何況,你的所謂全局變量是一般的全局變量,根本不會讓MAIN内的變量受到影響,所以,使局部變量的結果。明白沒有!接分ING
------解决方案--------------------
一个是方法的局部变量 一个类的实列变量```
STATIC 方法不能直接调用实列变量的!
------解决方案--------------------
这还问为什么?规定而已
------解决方案--------------------
晕,还不如用平实易懂的方式来解释,动辄“虚拟机运行本质”会吓死很多初学者
------解决方案--------------------
我们老师说这个是近亲原则
------解决方案--------------------
这个问题放到这里来问,唉,楼主基础的可以……
------解决方案--------------------
访问类变量
class Test{

static int i = 0;

public static void main(String[] args){\
System.out.println(i);
int i = 2;
}
}
------解决方案--------------------
访问类变量
class Test{

static int i = 0;

public static void main(String[] args){\
System.out.println(i);
int i = 2;
}
}

------解决方案--------------------
耐心。。。要照顾新人,大家都是从新手开始的。。。
------解决方案--------------------
我们要欢迎新人,而不是吓走新手,精神可佳,支持!
------解决方案--------------------
是不是 this.i就能输出0了?