了解Java匿名类?

时间:2016-02-24 06:57:58

标签: java

我遇到了以下代码,并且很难理解它。

这是使用匿名类+匿名方法吗?

public class TestClass {
   protected boolean getValue() {
      return true;
   }
}

public class Main {
   public static void main(String[] args) {
        TestClass testClass = new TestClass() {
            {
                // call TestClass.getValue()
                boolean value = getValue();
            }
        };
    }
}

1 个答案:

答案 0 :(得分:4)

匿名类声明中的块不是"匿名方法&#34 ;;它是一个"实例初始化程序"。请参阅JLS 8.6,其中说明"在创建类的实例时执行类中声明的实例初始化程序"。因此,当代码创建新对象testClass时,它还会执行初始化程序,该程序会调用getValue()并将结果存储在本地boolean变量中。但是,此变量对于初始化程序块是本地的,因此在初始化程序执行完毕后将无法再访问该值。因此,编写时,实例初始化程序不会执行任何有用的操作。 (但是,如果为了使代码片段更小而删除大量代码,我可以理解。)