不管是外部类还是内部类,都是在第一次使用时才会加载,不会跟着外部类加载而加载。
一、内部类实例创建:
静态内部类:静态内部类实例创建依赖外部类。
非静态内部类:非静态内部类实例创建依赖外部类实例。
//静态内部类
System.out.println(new test.StaticInnerClass());
//非静态内部类
System.out.println(new test().new InnerClass());
二、静态内部类与非静态内部类成员变量与方法
两者都可包含普通变量与普通方法。
静态内部类可包含静态变量与静态方法,非静态内部类不可(因不符合Java虚拟机的加载理念:所有静态变量必须在对象创建前完成)。
三、内部类调用外部类、外部类调用内部类
外部类调用内部类与其他类调用类方式相同。
内部类调用外部类:
非静态内部类可以直接调用外部类非静态数据与静态数据。静态内部类能直接调用外部类静态数据而不能直接调用外部类非静态数据。
类加载器文献:类加载示例
动态代理优秀博文:Java 动态代理作用是什么?