Java中(new Outer().new Inner())语法是什么?为何对象后用new?
聊聊Java里
(new Outer().new Inner())的语法逻辑 1. 这是什么语法?
这是Java中非静态内部类的直接实例化写法。
非静态内部类(未加static修饰的内部类)属于外部类的「实例附属成员」,它的存在必须依托外部类的实例。这段代码是把两步操作合并成了一行:
- 先执行
new Outer()创建一个外部类Outer的实例对象 - 基于这个外部类实例,通过
.new Inner()创建绑定到它的内部类Inner实例 - 整体用括号包裹是为了明确执行优先级,确保先完成内部类实例的创建,再调用它的
print()方法
拆成更直观的常规写法是这样:
Outer outerObj = new Outer(); Outer.Inner innerObj = outerObj.new Inner(); innerObj.print();
2. 为什么要在对象实例后使用new运算符?
核心原因是非静态内部类与外部类实例存在强制绑定关系:
- 非静态内部类可以直接访问外部类的非静态成员(比如外部类的实例变量、非静态方法),这意味着它必须依附于一个具体的外部类实例才能正常工作
- 如果跳过外部类实例直接写
new Inner(),Java编译器无法确定这个内部类实例该关联哪个外部类实例,会直接抛出编译错误 - 只有通过外部类实例调用
.new Inner(),才能建立内部类与外部类实例的绑定关系,让内部类可以正常访问外部类的实例成员
举个反例,直接实例化非静态内部类会报错:
// 编译错误提示:No enclosing instance of type Outer is accessible. Must qualify the allocation with an enclosing instance of type Outer Inner innerObj = new Inner();
内容的提问来源于stack exchange,提问作者Name Null
相关产品推荐
相关产品推荐

