【问题标题】:access to shadowed variable in local class访问本地类中的阴影变量
【发布时间】:2014-08-25 16:12:50
【问题描述】:

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

为什么我无法在第 8 行使用“this”关键字访问 inTestOne() 方法中的阴影变量

【问题讨论】:

    标签: java shadowing


    【解决方案1】:

    为什么我无法在第 8 行使用“this”关键字访问 inTestOne() 方法中的阴影变量

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

    一旦变量被隐藏,您将无法访问它。这没关系,因为变量和本地内部类都是你自己去改变的;如果您想访问被遮蔽的变量,您需要做的就是重命名它(或重命名遮蔽它的变量,对您来说更有意义)。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 即便如此,x 是有效的 final 但不是 final,因此从本地类访问它仅适用于 Java 8+。
      猜你喜欢
      • 1970-01-01
      • 2012-09-03
      • 2010-10-11
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多