2012-04-01 3 views
9

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

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

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

это нормально? Thanks

+8

Да это нормально, а иногда необходимо. –

+1

Если вы просто собираетесь перестроить исключение, вам не понадобится попытка catch. Улов try необходим, потому что вы должны что-то делать с исключением (по минимуму, занося его в журнал), если вы решите не делать этого, то это необязательно. – SJuan76

+0

Мне нужно напечатать что-то в System.err, а затем System.exit Вот что делает метод throwExcpetion (e) –

ответ

9

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

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

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

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

+0

Я обязан использовать только Java 6. Школа еще не одобрила 7. –