要在外部正确创建和访问Java成员内部类,必须先创建外部类实例,再通过该实例创建内部类对象,即Outer outer = new Outer(); Outer.Inner inner = outer.new Inner();。

要在外部正确创建和访问 Java 中的成员内部类,关键在于理解“依赖关系”和“语法路径”——内部类实例必须绑定到一个外部类实例上,不能独立存在。
必须先有外部类实例
成员内部类(非静态)隐式持有一个对外部类实例的引用,因此创建它时,编译器要求你明确提供这个上下文:
- 不能写
new Outer.Inner()—— 这是静态内部类的写法,对普通内部类会编译报错 - 正确写法是:
Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); - 也可以合并成一行:
Outer.Inner inner = new Outer().new Inner();,但要注意:每次调用都会新建一个外部类实例
在其他类中访问内部类的字段和方法
一旦拿到内部类实例,访问方式和其他普通对象一样:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 调用 public 方法:
inner.doSomething(); - 读取 public 字段:
int value = inner.count; - 如果内部类字段是 private,只能通过它的 public 方法间接访问
外部类自身如何创建并使用内部类
在外部类的方法里,可以直接 new 内部类,无需显式写出外部类名:
立即学习“Java免费学习笔记(深入)”;
-
Inner inner = new Inner();是合法且简洁的写法 - 此时 this 就是当前外部类实例,编译器自动补全为
this.new Inner() - 适合封装逻辑,比如把一组相关操作封装进内部类,再由外部类统一调度
常见错误和注意事项
几个容易出错的地方需要特别留意:
- 静态方法(如 main)里不能直接用
new Inner(),因为没有 this;必须先 new 外部类 - 内部类若与外部类有同名字段,用
Outer.this.field明确访问外部类变量 - 泛型外部类(如
Container<t></t>)仍要用Container.this,不能写Container<t>.this</t> - 嵌套多层时(如 Outer → Middle → Inner),每层都要用对应类名:Middle.this、Outer.this,不可跳级

















