来自 Java 文档:
局部类是在一个块中定义的类,它是一组在平衡大括号之间的零个或多个语句。您通常会发现在方法体中定义的本地类。
此外,Local 类是一种特殊的内部类,需要从外部类对象实例化:
与实例方法和变量一样,内部类与其封闭类的实例相关联
但是静态块是在类加载期间调用的,在创建对象实例之前。
那么,如何在静态初始化块中创建和实例化本地类呢?
例如:
class OuterClass {
static{
class InitLocalClass {
...
}
InitLocalClass lc = new InitLocalClass();
}
}
答案改编自本地类的 dup:根据 JLS 项目 # 15.9.2:
如果 C 是本地类(第 14.3 节),则令 O 为 C 的最内层词法封闭类。令 n 为整数,使得 O 是出现类实例创建表达式的类的第 n 个词法封闭类. 然后:
如果 C 出现在静态上下文中,则 i 没有立即封闭的实例。
否则,如果类实例创建表达式出现在静态上下文中,则会发生编译时错误。
否则,i 的直接封闭实例是 this 的第 n 个词法封闭实例(第 8.1.3 节)。