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?