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 kckd 是内部类。但是将非静态成员类称为内部类的成语,是标准的行话吗? 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语法表示)

Java基础语法要点概括

Java基础语法(下)

如何将 Java 语法转换为 C# of Myclass obj=new Myclass() public override mymethod()

java - PSQLException:错误:“$ 1”处或附近的语法错误[重复]

解析错误:语法错误,第 56 行的意外 T_FUNCTION [重复]