我知道在C ++中,类构造函数可以用这种形式的初始化表达式编写:
class-name(parameters) : initialization-expressions { body }
在Java中是否存在某种类似的模拟?如果没有,那么为什么不呢?因为我知道在C ++中,初始化表达式使构造函数调用更有效。这种效率助推器是否被Java的设计所忽视,还是只是不必要?
答案 0 :(得分:2)
C ++初始化列表的主要目的不是效率,而是用于正确初始化成员(因为否则将使用默认初始化,这可能是不合需要的,也可能是不可能的)。如果获得了任何效率,则是由于消除了您计划在构造函数体中撤消的不必要的昂贵的默认构造操作。 Java不会在构造函数体之前初始化成员对象,除了将它们设置为Null之外。即使作为一个主要是C ++的人,我也会自由地承认,使这种微优化语言复杂化并不值得。
答案 1 :(得分:0)
Java中不需要这种初始化,因为Java没有嵌入的成员对象。对象由原始字段和引用字段组成。 Java永远不会隐式调用对象上的默认构造函数(如果你不在成员初始化列表中初始化成员对象,C ++会这样做。)