
首先要明白以下三点:
- static类型的属性和方法,在类加载的时候就会存在于内存中。
- 要想使用某个类的static属性和方法,那么这个类必须要加载到虚拟机- 中。
- 非静态内部类并不随外部类一起加载,只有在实例化外部类之后才会加载。
现在考虑这个情况:在外部类并没有实例化,内部类还没有加载,这时候如果调用内部类的静态成员或方法,内部类还没有加载,却试图在内存中创建该内部类的静态成员,这明显是矛盾的。所以非静态内部类不能有静态成员变量或静态方法。

内部类也会生成class文件
非静态内部类例子:
非静态内部类是依赖于外部的实例化对象的,

在方法中创建非静态内部类的问题
public class TestNormalInnerCalss {public int method() {//这个是实例方法,调用实例方法必有一个外部类的对象,所以可以直接new Element(99, 10)。Element e = new Element(10, 99);return e.ch;}public static void main(String[] args) {//非静态内部类对象依赖于外部类对象,这里是static方法,没有创建外部类对象,所以不能直接new Element(99, 10)Element e = new TestNormalInnerCalss().new Element(99, 10);}class Element{int ch;int count;public Element(int ch, int count) {this.ch = ch;this.count = count;}}}
静态内部类


匿名类



局部内部类

