我们知道静态上下文不能引用任何类型的任何实例,但是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(){}
}
}
是不是禁止在它的封闭类中从静态上下文中实例化内部类?
答案 0 :(得分:5)
是不是禁止在它的封闭类中从静态上下文中实例化内部类?
否 - 禁止在没有封闭类的实例的情况下实例化内部类。在您的情况下,您做有一个封闭类的实例:
new MyOuter().new MyInner();
这完全没问题。
如果没有从实例方法指定封闭类,通常可以逃脱的唯一原因是它等同于
// Within an instance method
this.new MyInner();
有关详细信息,请参阅section 15.9.2 of the JLS。您的构造函数调用是“限定类实例创建表达式”。