JLS 15.9.2告诉我们如何确定一个封闭实例:让 C 为要实例化的类,让 i 为正在创建的实例。
如果 C 是内部类,则 i 可能有一个立即封闭的实例(第 8.1.3 节),确定如下:
[...]
如果 C 是本地类,则:
如果 C 出现在静态上下文中,则 i 没有立即封闭的实例。
否则,如果类实例创建表达式出现在 静态上下文中,则会发生编译时错误。
否则,令 O 为 C 的直接封闭类。令 n 为整数,使得 O 是出现类实例创建表达式的类的第 n 个词法封闭类型声明。
i 的直接封闭实例是 this 的第 n 个词法封闭实例。
我没明白粗体字是什么意思。让我提供我不应该编译的示例:
class A{
int a;
public static void main (String[] args) throws java.lang.Exception{
class Foo{
void bar(){
}
}
Foo f = new Foo(); //Instance creation expression occured in the static context
}
}
那有什么问题?你不能提供一个描述第二点的实际例子吗?