Java中的Constructor Exception中的`return value'?

Laj*_*agy 7 java exception instantiation

看看下面的代码片段:

A a = null
try {
  a = new A();
} finally {
  a.foo();  // What happens at this point?
}
Run Code Online (Sandbox Code Playgroud)

假设A的构造函数抛出运行时异常.在标记的行,我总是保证得到一个NullPointerException,或者foo()将在一半构造的实例上被调用?

SLa*_*aks 12

try块内的代码包含两个不同的操作:

  1. 创建一个新A实例.
  2. 将新实例分配给名为的变量a.

如果在步骤1中抛出异常,则不执行步骤2.
因此,你总会得到一个NullPointerException.


Phi*_*oss 6

如果new A()引发异常,您将始终获得NullPointerException,因为分配a将不会发生.