Jav*_*yer 1 java scjp inner-classes
我们知道,静态背景不能引用任何类型的任何实例,但主要方法,下面的代码示例,没有问题如何编译时会发生什么:
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(){}
}
}
Run Code Online (Sandbox Code Playgroud)
是不是禁止在它的封闭类中的静态上下文中实例化内部类?
是不是禁止在它的封闭类中的静态上下文中实例化内部类?
否 - 禁止在没有封闭类的实例的情况下实例化内部类.在你的情况,你这样做有封闭的类的实例:
new MyOuter().new MyInner();
Run Code Online (Sandbox Code Playgroud)
那完全没问题.
在没有从实例方法中指定封闭类的情况下,通常可以逃脱的唯一原因是它等同于
// Within an instance method
this.new MyInner();
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅JLS的第15.9.2节.构造函数调用是"限定类实例创建表达式".
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |