Почему возвращение в попытке не завершает метод?
Is it bad practice to return from within a try catch finally block?
Вы должны знать, что когда вы положили возврат внутри примерки поймать заявление, само возвращение удерживается и управляется блоком обработки Exeption.
Блок исключение запоминаются только ваше возвращение, и это действительно возвращает его только после того, как все проверки сделаны, что вовсе не означает, что, наконец, блок будет действительно иметь влияние на возвращение:
public int returnVal() {
int i = 0;
try {
return i;
}
finally {
i = 99;
}
}
В в этом случае возврат будет равен 0.
Но в случае, о котором вы упомянули в своем вопросе, вы оказываете влияние на возвращение во второй раз, и поскольку блок исключений не хочет, чтобы ваше возвращение прошло, пока оно не будет выполнено с ВСЕ его верификация, вы всегда сохраняете возвращаемое значение 2 раза в своем блоке исключений. Результат всегда будет 3.
Просто имейте в виду, что если вы положите ответ внутри try-catch-finally, то возврат не вернется, пока не завершится последний блок; само возвращение просто хранится до тех пор, пока все не будет проверено.
Блок 'finally' всегда вызывается в конце, поэтому он называется« наконец »(подумайте« попробуйте это, поймайте любое исключение и, наконец, сделайте это »). – Thomas
Блок 'finally' * всегда * выполнен независимо от того, что .. –
Да, я понимаю это, но почему компилятор игнорирует оператор return в try, даже если он попадает в него во время выполнения, почему возвращение в try не делает завершение метода –