有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

理解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) 个答案

  1. # 1 楼答案

    匿名类声明中的块不是“匿名方法”;它是一个“实例初始化器”。参见JLS 8.6,它表示“在创建类的实例时,将执行在类中声明的实例初始值设定项”。因此,当代码创建新对象testClass时,它还执行初始化器,该初始化器调用getValue(),并将结果存储在局部boolean变量中。但是,该变量是初始值设定项块的局部变量,因此在初始值设定项执行完毕后,将无法再访问该值。如前所述,实例初始值设定项没有做任何有用的事情。(但是,如果您为了使代码片段更小而删减了大量代码,我可以理解这一点。)