Java の try-catch メカニズムを使用するとオーバーヘッドが発生すると言われました。そのため、可能性のある例外を処理するには、チェック済み例外をスローするメソッドを try ブロック内に配置する必要がありますが、try ブロックのサイズを制限して、例外をスローする可能性のある操作のみを含めることをお勧めします。
これが賢明な結論かどうかはわかりません。
指定されたテキスト ファイルを処理する関数の以下の 2 つの実装を検討してください。
最初の方法で不必要なオーバーヘッドが発生することは事実ですが、私はそれを理解するのがはるかに簡単だと思います. ステートメントを見るだけでは、例外がどこから来るのか正確にはわかりませんが、コメントはどのステートメントが原因であるかを明確に示しています。
2 番目のものは、最初のものよりもはるかに長く、複雑です。特に、最初の優れた行読みイディオムは、readLine
呼び出しを try ブロックに収めるためにマングルする必要があります。
定義で複数の例外がスローされる可能性がある関数で例外を処理するためのベスト プラクティスは何ですか?
これには、try ブロック内のすべての処理コードが含まれています。
void processFile(File f)
{
try
{
// construction of FileReader can throw FileNotFoundException
BufferedReader in = new BufferedReader(new FileReader(f));
// call of readLine can throw IOException
String line;
while ((line = in.readLine()) != null)
{
process(line);
}
}
catch (FileNotFoundException ex)
{
handle(ex);
}
catch (IOException ex)
{
handle(ex);
}
}
これには、try ブロック内で例外をスローするメソッドのみが含まれています。
void processFile(File f)
{
FileReader reader;
try
{
reader = new FileReader(f);
}
catch (FileNotFoundException ex)
{
handle(ex);
return;
}
BufferedReader in = new BufferedReader(reader);
String line;
while (true)
{
try
{
line = in.readLine();
}
catch (IOException ex)
{
handle(ex);
break;
}
if (line == null)
{
break;
}
process(line);
}
}