Кроме того, хотя это плохая практика, если в блоке finally есть оператор return , он превзойдет любой другой возврат из обычного блока. То есть следующий блок вернет false:
try { returntrue; } finally { returnfalse; }
То же самое с выбрасыванием исключений из блока finally .
return Оператор без Expressionпопыток передать управление вызывающему методу или конструктору, который его содержит.
return Оператор с an Expressionпытается передать управление вызывающему методу, который его содержит; значение Expression становится значением вызова метода.
В предыдущих описаниях говорится "пытается передать управление", а не просто "передает управление", потому что если в методе или конструкторе есть какие-либо try инструкции, try блоки которых содержат return инструкцию, то любые finally предложения этих try инструкций будут выполняться в порядке от внутреннего к внешнему, прежде чем управление будет передано вызывающему метод или конструктор. Резкое завершение finally предложения может нарушить передачу управления, инициированную return оператором.