2013-03-09 10 views
5

私はJava初心者です。 try catchを使用してfinallyブロックを使用するときにJavaコードを整理する方法に関する質問があります。いくつかのテキストファイルを読み込んで、格納されているファイルの内容を計算する必要があるとします。私のコードはどのように見えますか?try catchを使用するとJavaコードを整理するfinallyブロック

例えば

コード1のようになりますより良いコーディング練習2つの

public static void main(String[] args){ 

try{ 

//open files using BufferedReader, read and store the file contents. 

// do computations on the data 

}catch(IOException e){ 

e.printStackTrace(); 

} 
finally{ 

//close the files 

} 
} 

public static void main(String[] args){ 

try{ 

//open files using BufferedReader, read and store the file contents. 

}catch(IOException e){ 

e.printStackTrace(); 

} 
finally{ 

//close the files 

} 
// do computations on the data 
} 

コード2のように見えますか?また、最終的にはブロック の後に置くか、最後に置くことができます。

+0

方法2これは、データを計算したい場合にはおそらくデータが必要なためです。 – Breavyn

+7

'catch'ブロックで' e.printStackTrace() 'を呼び出すと、例外を処理しません。これは古典的な[try/catch/ignore anti-pattern](http://c2.com/cgi/wiki?EmptyCatchClause)です。 – Asaph

+0

私はtry catchの中のtry catchに必要なものだけを入れます。ファイルを読み込むと例外がスローされるので、IDはtry catchにそれを入れます。あなたの計算がそうであれば、それらを別々のtry catchに入れ、そうでなければ外側に移動します。ですから、コード1を推薦するのは私の一種です。 – user489041

答えて

2

Java 7とtry-with-resourcesを使用してください。

try(Connection = pool.getConnection()) { // or any resource you open, like files 
// ... 

} // auto closes 

この機能は、finallyを非推奨に近づく - 私は個人的にはこの機能が追加されました一度finallyのためのユースケースを発見し、あなたはそれを避けることをお勧めしていません。機能プログラミングに関しては、gotoまたはおそらくcontinue、さらにはforループのようなものです。新しい機能では不要になりました。

+0

このアドバイスをいただきありがとうございます。私はそれを試してみる。 – scv

1

最後にtry-catchの直後にブロックを配置します。データの計算はあなた次第ですが、try-catchブロックの後に置くと、条件を使用しない限り例外がスローされても計算が試行されます。

0

可変スコープの問題を実行せずにデータの計算を行う方が簡単になるため、2番目の方法を使用する必要があります。ただし、両方の方法は、実行する必要のある計算に応じて機能します。

0

秒。

例外があるアイデアは、問題が検出された時点でそれらを投げ、以前の問題がもはやコードの実行に影響を与えない最初の時点よりも早くキャッ​​チされるということです。可能であれば、catchブロックでいくつかの処理を行い、finallyブロックを使用していくつかのクリーンアップを行います。

最初のコードサンプルでは、​​catchの後のコードは引き続き例外の原因となったエラーの影響を受けます。だから、あなたはそれを早期に見つけました。つまり、関数の複雑さを不必要に高めるif文を追加する必要があるかもしれません。 ファイルが大きい)

1:

0

これは、私は2つの可能な例を参照してください、あなたのシステムの仕様に依存します。それからあなたはそれを記憶にロードできません。そして、あなたはファイルの断片を一つ一つ読み、すべての断片についてあなたの論理を行うべきです。これは、あなたが忘れることを防ぐでしょう。

2)ファイルが小さいです。その後、最初のケースに従うか、またはmemmoryでファイルを読み、それを閉じてから処理するかを選択する必要があります。

もう1つの考慮事項があります。:ファイルが閉じていない間に、他のプロセスはアクセスできません。あなたのロジックが非常に長い場合には、問題があります。そのような場合には、まずファイルを読み込んで閉じておく方が良いでしょう。

関連する問題