1

我们知道静态上下文不能引用任何类型的任何实例,但是 main 方法会发生什么,以下代码示例如何编译没有问题:

public class MyOuter
{
    public static void main(String[] args) 
    {
        MyOuter mo = new MyOuter(); // gotta get an instance!
        MyOuter.MyInner inner = mo.new MyInner();
        inner.seeOuter();

        //Or

        MyOuter.MyInner inner = new MyOuter().new MyInner();
    } 

    class MyInner
    {
        public void seeOuter(){}
    }
 }

是否禁止在其封闭类的静态上下文中实例化内部类?

4

1 回答 1

5

是否禁止在其封闭类的静态上下文中实例化内部类?

不 - 禁止实例化没有封闭类实例的内部类。在您的情况下,您确实有一个封闭类的实例:

new MyOuter().new MyInner();

这完全没问题。

您通常可以在不从实例方法中指定封闭类的情况下逃脱的唯一原因是它相当于

// Within an instance method
this.new MyInner();

有关详细信息,请参阅JLS 的第 15.9.2 节。您的构造函数调用是“合格的类实例创建表达式”。

于 2012-09-18T09:05:32.790 回答