非静态内部类依赖于外部类的实例,也就是说需要先创建外部类实例,才能用这个实例去创建非静态内部类。而静态内部类不需要。

    1. public class OuterClass {
    2. class InnerClass {
    3. }
    4. static class StaticInnerClass {
    5. }
    6. public static void main(String[] args) {
    7. // InnerClass innerClass = new InnerClass(); // 'OuterClass.this' cannot be referenced from a static context
    8. OuterClass outerClass = new OuterClass();
    9. InnerClass innerClass = outerClass.new InnerClass();
    10. StaticInnerClass staticInnerClass = new StaticInnerClass();
    11. }
    12. }

    静态内部类不能访问外部类的非静态的变量和方法。