首先非静态内部类是不能有静态成员的,对于java类加载顺序:首先加载类,执行static变量初始化,接下来执行对象的创建。
如果我们要执行代码中的变量初始化,那么必须先执行加载外部类,再加载内部类,最后初始化静态变量。
我们可以把内部类看成外部类的非静态成员,它的初始化必须在外部类对象创建后以后进行,要加载内部类必须在实例化外部类之后完成 ,java虚拟机要求所有的静态变量必须在对象创建之前完成,这样便产生了矛盾。
静态内部类实际上已经脱离了外部类的控制,创建对象时也不再需要外部类对象的存在,实质上只是一个放置在别的类中的普通类而已。Outer.Inner.function();
|