Размещение оператора 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 тогда ваш код немного запутывает читателя, так как теперь есть два оператора возврата, которые актуальны, и неясно, какой из них должен иметь приоритет над другим.

Другие вопросы по тегам