2017-04-16 3 views
0

Java Docsの次のコードを検討してください。 Javaのドキュメント 1としてtryブロックおよびtry-with-resourcesステートメントからスローされた例外文

static String readFirstLineFromFile(String path) throws IOException { 
    try (**BufferedReader br = new BufferedReader(new FileReader(path))**) { 
     **return br.readLine();** 
    } 
} 

、例外が tryブロックとのtry-と資源のステートメントの両方からスローされた場合readFirstLineFromFileは、その後、 方法readFirstLineFromFileスロー例で

try ブロックからスローされた例外。 try-with-resourcesブロックからスローされた例外は です。 BufferedReaderのインスタンスが試し-とリソース 文で宣言されているので一方

、それはまた

を言及している、それは関係なく、try文 が正常に完了したかどうかの閉じられますまたは突然(方法
のIOExceptionをスローするBufferedReader.readLineの結果として)。 (closeメソッドが私の理解あたりとして... tryブロックが実行された後にのみ呼び出されることを意味します)

ので、文で-資源-試してみて、ブロックスロー例外を試す両方と仮定例外は

1)例外が最初tryブロックからスローされるスローされる順序を考慮return br.readLine();

2) tryブロックが完了すると(tryブロックから例外がスローされたかどうかにかかわらず)、Buffered Readerのcloseメソッドが呼び出され、exceptionもスローされます。だから、

、(それが最後に実行されたので)、理想的方法readFirstLineFromFileからスローされた例外は、BufferedReaderののcloseメソッドからのものであるべきではなく、tryブロック内のreturn br.readLine();から1(のJavadoc内で言及されたものと比較して)

誰かが疑いを明確にしてください。

+0

これが理想的ではない理由はわかりません。技術的な例外ではなく、tryブロックによってスローされた機能的な例外を取得することをお勧めします。close()メソッドによってスローされたことは何もできません。たとえば、ファイルが削除されたなどの理由で例外がIOExceptionである場合は、ファイルから読み取ることが不可能であることを示す例外が必要です。ファイルの削除によっても発生します)。 –

答えて

0

try(<<stuff>>){stuff.dude();}try{stuff.dude();}finally{stuff.close();}のようなものです。

成功するか失敗するかによって、適用可能な場合はクローズ可能です。

関連する問題