Take a look that the following code snippet:
A a = null
try {
a = new A();
} finally {
a.foo(); // What happens at this point?
}
Suppose A’s constructor throws a runtime exception. At the marked line, am I always guaranteed to get a NullPointerException, or foo() will get invoked on a half constructed instance?
The code inside the
tryblock contains two distinct operations:Ainstance.a.If an exception is thrown in step 1, step 2 will not be executed.
Therefore, you will always get a
NullPointerException.