访问本地类中的shadowed变量

时间:2014-08-25 16:12:50

标签: java shadowing

我是java的新手,我对以下示例感到困惑

public class Test {

   int testOne(){  //member method
       int x=5;
         class inTest  // local class in member method
           {
             void inTestOne(int x){
             System.out.print("x is "+x);
         //  System.out.print("this.x is "+this.x);
           }
  }
       inTest ins=new inTest(); // create an instance of inTest local class (inner class)
       ins.inTestOne(10);
       return 0;
   }
    public static void main(String[] args) {
   Test obj = new Test();
   obj.testOne();
}
}

为什么我无法使用&#34访问inTestOne()方法中的带阴影的变量;这个"第8行中的关键字

2 个答案:

答案 0 :(得分:5)

  

为什么我无法使用&#34访问inTestOne()方法中的带阴影的变量;这个"第8行中的关键字

因为x 不是类的成员变量;它是本地变量。关键字this可用于访问类的成员字段,而不是本地变量。

变量被遮蔽后,您无权访问它。这没关系,因为变量和本地内部类都是你自己要改变的;如果你想访问阴影变量,你需要做的就是重命名它(或者重命名阴影它的变量,无论什么对你更有意义)。

注意:不要忘记标记本地变量final,否则即使没有阴影,也无法访问它。

答案 1 :(得分:2)

this.用于访问成员 - 本地变量不是成员,因此当它被遮蔽时无法以这种方式访问​​。