' new'的语法在java中

时间:2015-09-08 14:31:36

标签: java inner-classes nested-class

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

在下面的代码中,

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()是必需的。

3 个答案:

答案 0 :(得分:7)

您指出的括号实际上不适用于Kb,而是K.Ka.Kb

new K.Ka.Kb()

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

答案 1 :(得分: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

答案 2 :(得分:1)

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

  1. 您正在创建Kb的新实例(实际上是K.Ka.Kb级;视情况而定,您可以省略K.Ka.
  2. ,您在其上调用new Kc()来创建Kc
  3. 的新实例
  4. ,您在其上调用new Kd()来创建Kd
  5. 的新实例