movq
V2EX  ›  程序员

new A().new B()这个是什么 Java 语法

By movq at 2022 年 11 月 17 日 · 2860 次点击
class Outer {

    class Inner {
        void print() {
            System.out.println("Inner printing");
        }
    }


    public static void main(String[] args) {
        (new Outer().new Inner()).print();
    }
}

有没有大佬解释一下(new Outer().new Inner()这个步骤具体发生了些什么内容呢?

12 条回复  •  2022-11-18 18:04:06 +08:00
ysc3839
   1
ysc3839  
   2022 年 11 月 17 日
我不懂 Java ,猜测 Inner 是可以用 Outer 里的变量的,所以要在一个 Outer 实例上 new Inner 。
westoy
   2
westoy  
   2022 年 11 月 17 日
镶嵌类, 本质就是
Outer class_ = new Outer();
Outer.Inner inner = class_.new Inner();
inner.print();
biubiuF
   3
biubiuF  
   2022 年 11 月 17 日
返回了一个类的内部类对象
movq
   4
movq  
OP
   2022 年 11 月 17 日
@westoy `class_.new Inner();`这种语法叫什么呢
yty2012g
   5
yty2012g  
   2022 年 11 月 17 日
实例化内部非静态类
mango88
   6
mango88  
   2022 年 11 月 17 日
看一下 内部类 相关的概念定义呗
westoy
   7
westoy  
   2022 年 11 月 17 日
@movq

你可以搜 Nested Classes
66Zi2nJk5Z6mdtzj
   8
66Zi2nJk5Z6mdtzj  
   2022 年 11 月 17 日
我觉得你在监控我,前天我刚看到新公司的代码,然后问了我朋友,今天你就来。
XXWHCA
   9
XXWHCA  
   2022 年 11 月 18 日
实例话非静态内部类之前需要先实例化它的外部类对象,非静态内部类的会有一个默认的构造方法,参数就是外部类对象。
fiveStarLaoliang
   10
fiveStarLaoliang  
   2022 年 11 月 18 日
你的内部类非 static, 如果是 static 的就可以 new Out.Inner() 直接 new 出来了
e7
   11
e7  
   2022 年 11 月 18 日
一般用于拆类吧,内部类不能独立存在
season8
   12
season8  
   2022 年 11 月 18 日
@ysc3839 还说你不懂
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 36ms · 3.9.8.5