【问题标题】:Is there member initialization list syntax in Java like C++?Java中是否有像C++这样的成员初始化列表语法?
【发布时间】:2013-02-02 17:16:40
【问题描述】:

我是一名 Java 程序员,目前正在阅读有关设计模式的 GoF 书籍,其中的示例以 C++ 和 Smalltalk 语法给出。我在 C++ 中遇到了一种特殊的语法,我发现它被称为 member initialization list 。从给出的答案看来,使用成员初始化列表似乎比使用成员变量赋值是一种好习惯(效率更高)。Java中有类似的东西吗?如果不是,那么 Java 设计者没有加入这个特性应该是有充分理由的。您对此有何看法?

【问题讨论】:

  • 我对Java的理解非常有限,如果我说的不对,请大家指正:在Java中,成员变量要么是引用,复制起来很便宜,要么是简单的数据类型,比如int和 double,复制起来也很便宜。因此,默认情况下初始化一个变量,然后为它分配一个新值,你不会损失太多。而在 C++ 中,对象可能具有非常昂贵的默认初始化。而且,如果您只是要覆盖旧值,那么默认初始化是一种巨大的浪费。
  • 另外,C++中有些对象不能默认初始化,在这种情况下初始化列表是必须的。
  • 这个问题在这里得到了详细解答:stackoverflow.com/questions/7154654/…

标签: java c++ language-design


【解决方案1】:

谢天谢地,在 C++ 中需要它的原因不适用于 Java。

字段只是引用或原语,因此您不必担心自己正在构建字段对象并对它们执行赋值操作。

Java 允许在构造函数主体中只分配一次 final 字段(尽管这方面的规范非常冗长)。

【讨论】:

    【解决方案2】:

    不,您需要在成员的声明、构造函数或从构造函数调用的初始化方法中初始化成员。

    (假设成员需要超出其默认值的初始化。)

    【讨论】:

    • @Geek 它在 C++ 中可能更“高效”,但这与 Java 完全无关,因为 Java 不是 C++。至于猜测 Java 的最初意图,这主要是对 SO 的 OT——但我认为这是 Java 的“更简单的 C++”性质的一部分。
    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多