匿名班的决赛?

时间:2018-09-20 18:54:21

标签: java final anonymous-class

我还有另一个关于匿名班级结业的问题。

在匿名类内部,访问定义了匿名类的类的属性和方法。

访问定义了匿名类的方法的局部变量(如果它们是最终的)。这是因为方法完成后,局部变量将不再存在。

package a;

public class A {

private int i = 4;

public void meth() {
    System.out.println("will not use");
}

public void meth2() {
    int j = 4;
    final int k = 3;

    A a = new A() {
        public void meth() {
            System.out.println("i-4 is " + (i - 4));   
            System.out.println("j-4 is " + (j - 4));   
            System.out.println("k-4 is " + (k - 4));  
        }
    };
    a.meth();

}

public static void main(String st[]) {
    A a = new A();
    a.meth2();
  }
}

以下结果: 跑: i-4为0 j-4是0 k-4是-1

在上面的示例中(我没有得到任何错误并且没有结果) ........我可以访问所有变量和方法???但是为什么只说final和子类中的定义,为什么没有final变量将不再存在。

1 个答案:

答案 0 :(得分:0)

我假设您使用的是Java 8或更高版本。在Java 8及更高版本中,匿名类可以访问“有效地为final”的局部变量,即,它们没有显式声明为final,但从未分配给它们,因此可以声明为final 。局部变量j实际上是最终变量,因为它在初始化后从未分配给它,因此假设它是Java 8+,则可以在匿名类中使用它。变量i是实例变量,因此可以通过A.this进行隐式访问,因此i是否为最终变量都无关紧要。