看看下面的代码片段:
A a = null
try {
a = new A();
} finally {
a.foo(); // What happens at this point?
}
假设A的构造函数抛出运行时异常。在标记的行中,我总是保证会得到一个NullPointerException,或者foo()会在一半构造的实例上被调用吗?
答案 0 :(得分:12)
try
块内的代码包含两个不同的操作:
A
实例。a
的变量。如果在步骤1中抛出异常,则不执行步骤2
因此,您将始终获得NullPointerException
。
答案 1 :(得分:6)
如果new A()
引发异常,您将始终获得NullPointerException,因为a
的分配不会发生。
答案 2 :(得分:1)
我认为你总是会在标记线上得到一个NPE。 任务永远不会发生。
答案 3 :(得分:1)
如果在构造函数中发生异常,则调用new A(),那时该对象具有null值。所以a.foo() 给出空指针异常。你可以给出条件好像(a!= null){ a.foo(); }