发生异常时分配值(Java)

Ced*_*eve 2 java variable-assignment

以下是一些示例代码来说明我们的问题:

A a = null;
try {
  a = new A();
  a = doSomethingThatWillThrowAnException();
} finally {
  System.out.println("A = " + a);
}
Run Code Online (Sandbox Code Playgroud)

问题是,finally块中打印的“ a”的值是什么?

我不确定,我想我偶然发现了一些可能无法完全描述的东西。我在笔记本电脑(x86上为jdk1.6.0.16)上观察到“ a”等于A()。但是,对于Solaris上的JDK 1.4,我认为该值为null(就像即使抛出异常也会执行分配一样)。显然,这与错误有关,我们将部署一个没有分配的版本,只是为了确保,但是我们想知道你们中的一个人是否也注意到了这一点,或者提出了某种解释。

我们还将做的是编写一个示例程序,以在有问题的JDK上对此进行演示……然后我们将发布结果。

Mic*_*rdt 5

当发生异常时,绝对不应发生分配-这将是JVM中非常严重的错误。但是我首先怀疑异常实际上发生在其他地方(例如在构造函数A()中)。