-2
try {
        bufferedReader = new BufferedReader(new FileReader(new File(file,FILENAME)));
        String readLine = bufferedReader.readLine();
        //do stuff

    } catch(Exception e) {
        throw e; 
    } finally {
        if (bufferedReader!=null)
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
}

このコードでは、いずれにしても bufferedReader の終了が呼び出されますか?

4

5 に答える 5

3

はい、どのような場合でも呼び出します(あなたの場合はnullでない場合).Javaドキュメントによると

try ブロックが終了すると、finally ブロックが常に実行されます。これにより、予期しない例外が発生した場合でも、finally ブロックが実行されます。しかし、finally は例外処理以外にも役立ちます。プログラマは、return、continue、break によってクリーンアップ コードが誤ってバイパスされるのを防ぐことができます。例外が予想されない場合でも、最終ブロックにクリーンアップ コードを配置することは常に良い方法です。

Java7 を使用している場合は、try-with-resources ステートメントを使用することを強くお勧めします。その後、コードに finallyブロック を記述する必要はありません。

try-with-resource の例

     try (BufferedReader  bufferedReader = 
             new BufferedReader(new FileReader(new File(file,FILENAME)));) {
              String readLine = bufferedReader.readLine();
              //do stuff   
      } catch(Exception e) {
           throw e; 
     } 

注: finallyブロックが実行されるのは 1 つのケースだけではありません。それは、JVM のシャットダウン時 (通常はSystem.exit()ステートメントを使用するか、JVM プロセスが外部で強制終了されたとき) です。それ以外の場合はすべて、finallyの実行が保証されます

于 2013-08-07T18:24:34.460 に答える
0

最後に try/catch ブロックで、何があってもそれが起こることを意味します。また、例外は IOException と表現する方が適切です。この状況で catch ブロックに例外をスローさせる理由はまったくありません。

注: System.exit() を呼び出すと、検出されるとすぐに終了し、アプリケーションが JVM (Java 仮想マシン) によって終了されることは事実です。

于 2013-08-07T18:24:43.170 に答える
0

この質問を参照してください。

Javaでは、「最終的に」ブロックが(メインメソッドで)呼び出されることが保証されていますか?

基本的に、finally ブロックは常に実行されますが、例外が 1 つあります。finally ブロックが実行される前に JVM が終了した場合です。

bufferedReader が実行されているかどうかについて - 書かれているように、null でない限り、はい、上記の例外があります

于 2013-08-07T18:25:22.600 に答える
0

例外がスローされたかどうかにかかわらず、Finally は常に実行されます。そのため、 null でないbufferedReader.close();場合に実行されますbufferedReader

于 2013-08-07T18:24:26.147 に答える