как блок Try catch finally выполняется JVM
Согласно спецификации языка Java,Раздел §14.20.2
Оператор try с блоком finally выполняется первым выполнением блока try. Тогда есть выбор:
Если выполнение блока try завершается нормально, выполняется блок finally, и затем появляется выбор:Если блок finally завершается нормально, тогда оператор try завершается нормально.Если блок finally завершается преждевременно по причине S, то оператор try завершается преждевременно по причине SЕсли я правильно его интерпретирую, то после выполнения блока try, наконец, вызывается, но как все это работает и почему я получил вывод,
public static int TestTryFinallyBlock()
{
int i =0;
try
{
i= 10; //Perform some more operation
return i;
}
finally
{
i = 40;
}
}
public static void main( String[] args )
{
int i1 = TestTryFinallyBlock(); //Here the output was 10 not 40
}
Я хочу знать, как эта штука дала результат 10.
Когда блок try выполняется и встречается оператор return, выходное значение уже помещается в стек, а затем выполняется блок finally
Я знаю, что возвращение встречается первым, а затем, наконец, блокируется, поэтому вывод равен 10, ноКак интерпретировать jvm или как блок try finally обрабатывается или конвертируется jvm?
Это jvm использует раздел перехода GOTO для перехода в раздел finally или стек уже поддерживается?