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()
是必需的。
您指出的括号实际上不适用于 Kb
但 K.Ka.Kb
.
new K.Ka.Kb()
正在创建 K.Ka.Kb
嵌套 class 的新实例。
Kb()
是 class Kb
的默认构造函数。它与行的第一个 new
有关:
- 您正在创建
Kb
的新实例(实际上 class K.Ka.Kb
;根据上下文您可以省略 K.Ka.
)
- 您正在调用
new Kc()
以创建 Kc
的新实例
- 您正在调用
new Kd()
以创建 Kd
的新实例
它正在调用 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
非静态成员 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()
是必需的。
您指出的括号实际上不适用于 Kb
但 K.Ka.Kb
.
new K.Ka.Kb()
正在创建 K.Ka.Kb
嵌套 class 的新实例。
Kb()
是 class Kb
的默认构造函数。它与行的第一个 new
有关:
- 您正在创建
Kb
的新实例(实际上 classK.Ka.Kb
;根据上下文您可以省略K.Ka.
) - 您正在调用
new Kc()
以创建Kc
的新实例
- 您正在调用
new Kd()
以创建Kd
的新实例
它正在调用 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