java中'new'的语法[重复]
Posted
技术标签:
【中文标题】java中\'new\'的语法[重复]【英文标题】:Syntax for 'new' in java [duplicate]java中'new'的语法[重复] 【发布时间】:2015-12-04 07:07:21 【问题描述】:非静态成员类的构造函数采用一个额外的隐藏参数,它是对直接封闭类的实例的引用。还有一个“新”的句法扩展。
在下面的代码中,
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();
你能帮我理解Kb()
在K.Ka.Kb().new Kc().new Kd()
中的含义吗?我知道new Kc()
是必需的,如第一段所述。
【问题讨论】:
仅当您阅读this时才考虑 【参考方案1】:您指出的括号实际上不适用于Kb
,而是K.Ka.Kb
。
new K.Ka.Kb()
正在创建 K.Ka.Kb
嵌套类的新实例。
【讨论】:
哦,你是说(new K.Ka.Kb()).new Kc().new Kd();
?
@SotiriosDelimanolis kc
和 kd
是内部类。但是将非静态成员类称为内部类的成语,是标准的行话吗?
Yes【参考方案2】:
它正在调用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
【讨论】:
【参考方案3】:Kb()
是类Kb
的默认构造函数。这与该行的第一个 new
有关:
-
您正在创建
Kb
的新实例(实际上是K.Ka.Kb
类;根据上下文,您可以省略K.Ka.
)
您正在调用 new Kc()
以创建 Kc
的新实例
您正在调用 new Kd()
以创建 Kd
的新实例
【讨论】:
以上是关于java中'new'的语法[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Java 语法转换为 C# of Myclass obj=new Myclass() public override mymethod()