Я только что столкнулся с этим следующим кодом:
public class TestFinally {
public static void main(String[] args) {
int returnValue = function();
System.out.println("Return value: " + returnValue);
}
public static int function() {
try {
return 1;
} catch (Exception e){
return 2;
} finally{
return 3;
}
}
}
Несомненно, что запуск этого кода даст выход "Возвращаемое значение: 3".
Однако мне любопытно, что:
- Механизм внутренних функций в JVM. Кто-нибудь знает, действительно ли виртуальная машина заменяет возвращаемое значение в стеке, переписывая первый "возврат 1"? Если да, где я могу найти дополнительную информацию об этом.
- Мне еще предстоит найти использование для возврата в механизм finally, который используется таким образом и разрешен в реализованном в JVM. Если эта конструкция кода используется как средство возврата код ошибки, это, на мой взгляд, есть лучшие способы регистрации ошибок или вернуть эти коды ошибок. Кто-нибудь нашел применение для такого построить?
Большое спасибо заранее.
Cheers, Верн