java中'new'的语法

ove*_*nge 6 java nested-class inner-classes

非静态成员类的构造函数采用额外的隐藏参数,该参数是对直接封闭类的实例的引用.还有一个'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();
}
Run Code Online (Sandbox Code Playgroud)

能否请您帮助我理解的意思Kb()K.Ka.Kb().new Kc().new Kd()?据我所知,这new Kc()是第一段所述.

Tun*_*aki 7

你指出的括号实际上并不适用于Kb但是K.Ka.Kb.

new K.Ka.Kb()
Run Code Online (Sandbox Code Playgroud)

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

  • 哦,你的意思是`(new K.Ka.Kb()).new Kc().new Kd();`? (3认同)
  • [是](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.3) (2认同)

Jon*_*eet 3

它正在调用 的构造函数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
Run Code Online (Sandbox Code Playgroud)