1. Независимо от того, есть ли исключение или исключение, код в финальном блоке будет выполнен; 2. Когда происходит возврат в попытке и пойма, в конце концов всё равно выполняется; 3. В итоге выполняется после операции выражения после возврата (в данный момент значение после операции не возвращается, но сначала сохраняется значение для возвращения, независимо от кода в конечном итоге, возвращаемое значение не меняется, даже если оно ранее сохранённое), поэтому значение возврата функции определяется до окончательного выполнения; 4. Лучше не включать возврат в финал, иначе программа выйдет досрочно, и возвратное значение не будет сохранённым в попытке или ловле. Пример:
Ситуация 1:try{} catch(){}finally{} return;
Оказывается, процедура проводится по порядку.
Ситуация 2:try{ return; }catch(){} наконец{} return;
Программа выполняет код перед возвратом в блоке try (включая операцию выражения в операторе return);
затем выполните последний блок и, наконец, выполните возврат в попытке;
Наконец, блок Return, потому что программа вернулась в TRY, и она больше не выполняется.
Ситуация 3:try{ } catch(){return; } наконец{} return;
Программа выполняет try первым, и если встречает исключение, запускает блок catch,
Если есть исключение, выполните код перед возвратом (включая операцию выражения в операторе return) в захвате, а затем выполните весь код в финальной операторе.
Наконец, выполните возврат в блоке ловли. После этого код в 4 местах больше не будет выполняться.
Без исключений: выполнить попытку, а затем наконец вернуться.
Ситуация 4:try{ return; }catch(){} наконец{return; }
Программа выполняет код перед возвратом в блоке try (включая операцию выражения в операторе return);
Затем выполните последний блок, потому что в финальном блоке есть возврат, так что выходите раньше.
Случай 5:try{} catch(){return; }наконец{вернуться; }
Программа выполняет код перед возвратом (включая операции выражения в операторе return) в блоке catch;
Затем выполните последний блок, потому что в финальном блоке есть возврат, так что выходите раньше.
Ситуация 6:try{ return; }catch(){return; } наконец{return; }
Программа выполняет код перед возвратом в блоке try (включая операцию выражения в операторе return);
Есть исключение: выполнить код перед возвратом (включая операцию выражения в операторе return) в блоке ловли;
Затем выполните финальный блок, потому что в финальном блоке есть возврат, и он выходит рано.
Без исключений: затем выполните последний блок снова и уходите раньше, потому что в финальном блоке есть возврат.
Окончательное заключение: Любая оператор возврата в try или catch выполняется перед финальной оператором, если она наконец существует.
Если в конечном итоге есть return statement, программа вернётся, значит, возврат в конечном итоге обязательно вернётся.
Компилятор наконец-то реализует возврат в качестве предупреждения.
|