попробуйте поймать в разделе наконец - PullRequest
9 голосов
/ 01 апреля 2012

Считается ли плохим программированием писать попытку и поймать в предложении finally?

У меня в основном методе есть fileInputStream, который я хочу закрыть.Я хочу поместить .close () в finally, чтобы он закрывался несмотря ни на что.Я не хочу добавлять объявление throws в метод main, так как это метод main: P

    }finally{
        try {
            commandFile.close();
        } catch (IOException e) {
            throwException(e);
        }
    }

это нормально?Спасибо

1 Ответ

9 голосов
/ 01 апреля 2012

Шаблон использования try / catch в методах finally, к сожалению, является повторяющимся шаблоном в Java 6 и ранее. Я бы сказал, что на самом деле это плохая практика, но ее нельзя избежать в Java 6 (см. Ниже для Java 7).

Дополнительная проблема заключается в том, что любые новые исключения, выдаваемые в блоке finally, будут переопределять исключения, которые были выданы до достижения этого блока.

В Java 7 есть специально для случаев, когда ресурсы должны быть закрыты (большинство случаев использования для конструкций try / finally / try / catch), новая конструкция try-with-resources. Это также будет охватывать как первичные, так и вторичные исключения.

Таким образом, использование этой конструкции теперь является лучшей практикой в ​​JDK 7, и да, код, который вы показываете, является плохой практикой в ​​Java 7.

...