这是关于Java默认构造函数行为的问题。在以下代码中剪切了
public class LocalIDSupplier implements IDSupplier {
private BiMap<BMTPropertyContainer, String> localid = HashBiMap.create();
private BiMap<String, BMTPropertyContainer> inverse = localid.inverse();
//Some methods
}
初始化了两个实例变量,但是一个变量依赖于另一个变量,所以对于所有JVM,保证默认构造函数将按照它们的声明顺序初始化这两个变量吗?显然,可以通过创建显式构造函数来确保它,但编译器没有这个问题。初始化中这种依赖性有问题吗?
答案 0 :(得分:4)
执行实例初始值设定项和实例变量初始值设定项 对于此类,分配实例变量初始值设定项的值 到相应的实例变量,按从左到右的顺序 它们以文本形式出现在课程的源代码中。如果 然后,执行任何这些初始化程序都会导致异常 不再处理初始化程序,此过程完成 突然有同样的例外。 [...]