成员内部类对象创建必须依赖外部类实例,因持有对外部类的隐式引用;正确写法为Outer outer = new Outer(); Outer.Inner inner = outer.new Inner();或连写new Outer().new Inner()。

Java 中成员内部类(非静态内部类)的对象创建,必须依赖外部类的实例,不能脱离外部类独立存在。
必须先有外部类实例
成员内部类持有对外部类实例的隐式引用,因此创建其对象前,必须先创建外部类对象。直接用 new Inner() 会编译报错。
- 正确写法:Outer outer = new Outer();
Outer.Inner inner = outer.new Inner(); - 也可以连写:Outer.Inner inner = new Outer().new Inner();(但注意:每次都会新建一个外部类实例)
内部类构造器可访问外部类成员
在内部类的构造方法或方法中,可以直接使用外部类的字段和方法(包括 private 成员),无需通过对象引用。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 例如:外部类有 private int x = 10;,内部类中可直接写 System.out.println(x);
- 若需显式指定外部类实例,可用 Outer.this,比如 Outer.this.x
初始化时机与常见写法
内部类对象通常在外部类方法中创建,也可作为外部类字段声明(但需在构造器或方法中完成初始化)。
立即学习“Java免费学习笔记(深入)”;
- 在外部类方法中初始化(最常见):
public void createInner() {
Inner inner = new Inner(); // this.new Inner(),this 可省略
} - 作为字段声明时,不能直接 new(除非是静态内部类),要放在构造器或方法里:
private Inner inner;
public Outer() {
inner = new Inner();
}
注意不能在静态上下文中直接创建
静态方法(如 main)、静态字段、静态代码块中,没有 this 引用,无法直接创建成员内部类实例。
- 错误示例:static Inner inner = new Inner(); → 编译失败
- 正确做法:先 new 外部类,再通过它创建内部类:
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
}

















