2012-04-01 69 views
9

在finally語句中寫一個try和catch是否被認爲是不好的編程?試着抓在最後一節

我在我的主要方法有一個fileInputStream,我想關閉。 我想將.close()放在finally中,所以無論如何它都會關閉。我不想爲主要方法添加拋出聲明,因爲它是主要方法:P

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

可以嗎? 謝謝

+8

是的,這是確定,有時是必要的。 – 2012-04-01 14:11:29

+1

如果你只是要重新拋出異常,你不需要try catch。 try catch是必須的,因爲你應該對異常做一些事情(最低限度,記錄它),如果你決定不這樣做,那就沒有必要了。 – SJuan76 2012-04-01 14:16:01

+0

我需要打印一些東西到System.err然後System.exit 這就是throwExcpetion(e)方法的作用 – 2012-04-01 14:18:41

回答

9

最後需要try/catches方法的模式不幸是Java 6和之前的循環模式。我認爲這實際上是一種不好的做法,但不是在Java 6中真正避免的做法(請參閱下面的Java 7)。

另一個問題是,在finally塊中拋出的任何新異常將覆蓋在到達此塊之前拋出的異常。

在Java 7中,特別針對資源需要關閉的情況(try/finally/try/catch結構的大部分用例)新的try-with-resources結構。這也將捕獲主要和次要異常。

使用這種結構是這樣,現在在JDK 7的最佳實踐,是的,你展示的代碼是這樣用Java 7做法不好

+0

我有義務只使用Java 6.學校還沒有批准7。 – 2012-04-01 15:14:42