Java中是否有像C++那样的成员初始化列表语法?

6
我是一名Java程序员,目前在阅读GoF设计模式的书籍,其中给出了C++和Smalltalk语法的示例。我遇到了C++中的一个特定语法,后来发现它被称为成员初始化列表。从给出的答案来看,使用成员初始化列表比使用赋值语句更好的做法(更加高效)。在Java中是否有类似的东西?如果没有,那么Java设计者没有将这个功能纳入其中应该有一个很好的理由。你对此有什么想法?

3
我对Java的理解非常有限,如果我说错了,请有经验的人纠正:在Java中,成员变量要么是引用(容易复制),要么是简单数据类型(如int和double,也容易复制)。 因此,通过默认初始化一个变量然后给它赋一个新值来进行操作时,你不会失去太多或者完全不会失去任何东西。而在C++中,对象的默认初始化可能非常昂贵。 如果你只是想覆盖旧值,那么默认初始化就是巨大的浪费。 - Benjamin Lindley
此外,在C++中,有些对象无法进行默认初始化,因此在这些情况下,初始化列表是必需的。 - Benjamin Lindley
1
这个问题在这里详细回答了:https://dev59.com/DGw05IYBdhLWcg3wmCwo - Bogdan
2个回答

4

需要在C++中使用的原因,幸好在Java中并不适用。

在Java中,字段只是引用或基本类型,所以您不需要担心构造字段对象并对其执行赋值操作。

Java允许在构造函数体中精确地分配final字段一次(虽然此规范非常冗长)。


1
不,你需要在声明中、构造函数中或从构造函数调用的初始化方法中初始化成员。
(假设成员需要超出其默认值的初始化。)

1
@Geek 在 C++ 中可能更“高效”,但这与 Java 完全无关,因为 Java 不是 C++。至于猜测 Java 的原始意图,这在 SO 上大多数情况下都是 OT 的,但我想它是 Java “更简单的 C++” 特性的一部分。 - Dave Newton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接