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

时间:2010-03-19 00:26:05

标签: java exception instantiation

看看下面的代码片段:

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

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

4 个答案:

答案 0 :(得分:12)

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

  1. 创建新的A实例。
  2. 将新实例分配给名为a的变量。
  3. 如果在步骤1中抛出异常,则不执行步骤2 因此,您将始终获得NullPointerException

答案 1 :(得分:6)

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

答案 2 :(得分:1)

我认为你总是会在标记线上得到一个NPE。 任务永远不会发生。

答案 3 :(得分:1)

如果在构造函数中发生异常,则调用new A(),那时该对象具有null值。所以a.foo() 给出空指针异常。你可以给出条件好像(a!= null){ a.foo(); }