Посмотрите, что следующий фрагмент кода:
A a = null
try {
a = new A();
} finally {
a.foo(); // What happens at this point?
}
Предположим, конструктор А генерирует исключение во время выполнения. В отмеченной строке я всегда гарантированно получаю исключение NullPointerException, или foo () будет вызываться на наполовину построенном экземпляре?