java 中 'new' 的语法

Syntax for 'new' in java

非静态成员 classes 的构造函数采用一个额外的隐藏参数,该参数是对直接封闭 class 的实例的引用。还有 'new' 的句法扩展。

在下面的代码中,

class K{
    static class Ka{
        static class Kb{
            class Kc{
                class Kd{

                }
            }
        }
    }
}

class Test{
    K.Ka.Kb.Kc.Kd k = new K.Ka.Kb().new Kc().new Kd();
}

你能帮我理解K.Ka.Kb().new Kc().new Kd()Kb()的意思吗?我了解第一段中所述 new Kc() 是必需的。

您指出的括号实际上不适用于 KbK.Ka.Kb.

new K.Ka.Kb()

正在创建 K.Ka.Kb 嵌套 class 的新实例。

Kb() 是 class Kb 的默认构造函数。它与行的第一个 new 有关:

  1. 您正在创建 Kb 的新实例(实际上 class K.Ka.Kb ;根据上下文您可以省略 K.Ka.
  2. 您正在调用 new Kc() 以创建 Kc
  3. 的新实例
  4. 您正在调用 new Kd() 以创建 Kd
  5. 的新实例

它正在调用 Kb 的构造函数。在三个语句中更容易显示这一点:

K.Ka.Kb x1 = new K.Ka.Kb();
K.Ka.Kb.Kc x2 = x1.new Kc(); // Pass x1 as the hidden constructor arg
K.Ka.Kb.Kd.Kd k = x2.new Kd(); // Pass x2 as the hidden constructor arg