是否保证构造函数中的操作顺序?

时间:2014-04-29 15:33:03

标签: java

这是关于Java默认构造函数行为的问题。在以下代码中剪切了

public class LocalIDSupplier implements IDSupplier {
private BiMap<BMTPropertyContainer, String> localid = HashBiMap.create();
private BiMap<String, BMTPropertyContainer> inverse = localid.inverse();

    //Some methods
}

初始化了两个实例变量,但是一个变量依赖于另一个变量,所以对于所有JVM,保证默认构造函数将按照它们的声明顺序初始化这两个变量吗?显然,可以通过创建显式构造函数来确保它,但编译器没有这个问题。初始化中这种依赖性有问题吗?

1 个答案:

答案 0 :(得分:4)

Java Language Specification

  

执行实例初始值设定项和实例变量初始值设定项   对于此类,分配实例变量初始值设定项的值   到相应的实例变量,按从左到右的顺序   它们以文本形式出现在课程的源代码中。如果   然后,执行任何这些初始化程序都会导致异常   不再处理初始化程序,此过程完成   突然有同样的例外。 [...]