先回答你第一个问题:
// 不能编译
// new MyInner().show();
new MyInner().show();你调用的地方搞错了,静态方法调用 非静态成员内部类. 这么写是有问题的.
因为这个方法优先于MyInner.class加载
第二个问题以下代码可以加载
MyOuter.MyInner in = new MyOuter().new MyInner(); 主要还是加载到内存的顺序问题
public class InnerTestDemo
{
public static void main(String[] args)
{
MyOuter.myMethod();
}
}
class MyOuter
{
class MyInner
{
int a =23;
public void show()
{
System.out.println(a);
}
}
public static void myMethod()
{
//不能编译
//new MyInner().show();
//编译成功。因为内部类相当于外层类的成员,因为myMethod()方法存//在时,这些非静态的成员必须建立对象才能在内存中存在,所以要先//创建外层内的对象,再创建内部类的对象。
MyOuter.MyInner in = new MyOuter().new MyInner();
in.show();
}
}