Размещение оператора return в методе с блоком finally
У меня есть простое сомнение. В следующих двух кодах, в первом return
заявление помещается внутри finally
блок
public int method1(){
try{
// Some Stuff
} catch(Exception e){
e.printStackTrace();
} finally{
return 0;
}
}
А во вторую return
заявление ставится как обычно
public int method1(){
try{
// Some Stuff
} catch(Exception e){
e.printStackTrace();
} finally{
}
return 0;
}
Есть ли разница между этими двумя? И какой вариант лучше использовать? Зачем?
1 ответ
Не рекомендуется "возвращаться" в блоке finally. finally
Блок может быть выполнен по двум причинам:
(a) Исключение было выброшено try
блок (и не пойман catch
блок) - в этом случае метод не будет иметь возвращаемого значения, поэтому return something
оператор в блоке finally не будет иметь никакого эффекта.
(б) try
блок завершен нормально. Если этот блок заканчивается return something
тогда ваш код немного запутывает читателя, так как теперь есть два оператора возврата, которые актуальны, и неясно, какой из них должен иметь приоритет над другим.