Всегда ли выполняется выполняется блок finally?
finally всегда выполняется

А зачем вопросы? Я джаву в глаза не видел, но проверить же минутное дело
кейс 1 (исключение перехватывается на том же уровне)


кейс 2 (исключение вылетает на уровень выше)


Автор правильно пишет. Если исключение выбросится на строке lnputFile in = new InputFile("Cleanup.java")j, то оно попадёт сразу в catch(Exception e) { System.out.println("Ошибка при конструировании InputFile"); }. Здесь finally не выполняется, так как исполнение кода не заходит в try блок, к которому прикреплён тот finally.

Но если исключение стрельнет где-то внутри цикла while((s = in.getLine()) != null), то сработает внутренний catch блок и finally блок. Внешний catch не будет выполнен.

А если в блоке try либо catch выполнить System.exit() ?
В таком случае finally блок не будет выполнен, так как javadoc System.exit() чётко пишет: "This method never returns normally." А раз метод не возвращает управление, то try блок не выполняется до конца, соответственно finally не запускается.