5

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

例えば

コード 1 は次のようになります。

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 は次のようになります。

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

}
}

2 つのうちどちらがより良いコーディング方法ですか? また、最終的にブロックを try catch の直後に配置するか、最後に配置する必要があります。

4

5 に答える 5

2

Java7とtry-with-resourcesを使用します。

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

} // auto closes

この機能は廃止に近づいてfinallyいます-この機能が追加された後のユースケースは個人的には見つかりませんでしfinallyた。回避することをお勧めします。関数型プログラミングに関する限り、それはループのようなものgotoか、ほぼ間違いなくループです。新しい機能により、使用が不要になりました。continuefor

于 2013-03-09T04:55:26.120 に答える
1

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

于 2013-03-09T04:54:18.970 に答える
0

2 番目の方法を使用する必要があります。これは、変数のスコープの問題に遭遇することなく、データの計算を簡単に行うことができるためです。ただし、実行する必要がある計算によっては、どちらの方法も機能します。

于 2013-03-09T05:01:21.150 に答える
0

二番目。

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

最初のコード サンプルでは、​​catch に続くコードは、例外の原因となったエラーの影響を受けています。それで、あなたはそれを早く捕まえました。つまり、関数の複雑さを不必要に高める if ステートメントをその周りに追加する必要がある場合があります。

于 2013-03-09T06:39:59.937 に答える
0

これはシステムの仕様によって異なります。2 つのケースが考えられます。

1)ファイルが大きい。その後、メモリにロードできません。そして、ファイルの写真を 1 つずつ読み取り、すべての写真に対してロジックを実行する必要があります。これにより、メモリ不足を防ぐことができます。

2)ファイルが小さい。次に、最初のケースに従うか、メモリ内のファイルを読み取り、ファイルを閉じてから処理するかを選択できます。

もう 1 つ考慮事項があります。ファイルが閉じられていない間は、他のプロセスがアクセスできません。ロジックが非常に長い場合、これは問題になる可能性があります。そのような場合、最初にファイルを読み取って閉じる方が適切です。

于 2013-03-09T08:46:51.727 に答える