В Java, try {...} finally {...} выполняется несколько неинтуитивно для меня. Как проиллюстрировано в другом вопросе, Выполняется ли окончательно в Java?, если у вас есть оператор return в блоке try, он будет проигнорирован, если определен окончательный блок. Например, функция
boolean test () {
try {
return true;
}
finally {
return false;
}
}
всегда возвращает false. Мой вопрос: почему это? Есть ли особая философия, лежащая в основе этого дизайнерского решения Java? Я ценю любую проницательность, спасибо.
Изменить: меня особенно интересует "почему" Java считает, что это нормально, чтобы нарушить семантику, которую я определяю. Если я вернусь в блок try, метод должен вернуться туда и обратно. Но JVM решает проигнорировать мою инструкцию и вернуться из подпрограммы, которая на самом деле еще не достигнута.