1. Незалежно від того, чи є виняток чи виняток, код у фінальному блоці буде виконаний; 2. Коли є повернення, спроба і ловля, нарешті все одно буде виконано; 3. Нарешті виконується після операції виразу після повернення (на цьому етапі значення після операції не повертається, але значення, яке потрібно повернути, зберігається першим, незалежно від коду в нарешті, повернене значення не змінюється, навіть якщо це вже збережене значення), тому значення функції визначається до остаточного виконання; 4. Краще не включати return final, інакше програма вийде раніше, і повернене значення не є збереженим у try or catch. Приклад:
Ситуація 1:try{} catch(){}finally{} return;
Схоже, процедура проводиться по порядку.
Ситуація 2:try{ return; }catch(){} нарешті{} return;
Програма виконує код перед поверненням у блоці try (включаючи операцію виразу в операторі return);
потім виконати фінальний блок і нарешті виконати повернення в спробі;
Нарешті, блокувати Return, бо програма повернулася в try, тому вона більше не виконується.
Ситуація 3:try{ } catch(){return; } нарешті{} повернення;
Програма виконує спробу першою, і якщо зустрічає виняток, вона виконує блок catch,
Якщо є виключення, виконайте код перед return (включаючи операцію виразу в операторі return) у catch, а потім виконайте весь код у фінальному операторі.
Нарешті, виконайте повернення у блоку ловлення. Після цього код у 4 місцях більше не виконуватиметься.
Без винятків: виконати спробу і нарешті повернутися.
Ситуація 4:try{ return; }catch(){} нарешті{return; }
Програма виконує код перед поверненням у блоці try (включаючи операцію виразу в операторі return);
Потім виконайте фінальний блок, бо у фінальному блоці є повернення, тому виходьте раніше.
Випадок 5:try{} catch(){return; }нарешті{повернутися; }
Програма виконує код перед поверненням (включаючи операції з виразом у операторі return) у блоці catch;
Потім виконайте фінальний блок, бо у фінальному блоці є повернення, тому виходьте раніше.
Ситуація 6:try{ return; }catch(){return; } нарешті{return; }
Програма виконує код перед поверненням у блоці try (включаючи операцію виразу в операторі return);
Існує виняток: виконати код перед return (включаючи операцію виразу в операторі return) у блоці catch;
Потім виконайте фінальний блок, бо в фінальному блоці є повернення, тож він виходить раніше.
Без винятку: потім виконати останній блок знову і вийти раніше, бо у фінальному блоці є повернення.
Остаточне завершення: Будь-який оператор return у try або catch виконується перед фінальним оператором, якщо він нарешті існує.
Якщо в 'Final's є return statement, то програма повернеться, тож return in буде обов'язково повернено.
Компілятор нарешті впроваджує return in як попередження.
|