2016-05-04 6 views
-1

たとえば、メソッドのシグネチャに例外をスローするとしましょう。例外はIOExceptionです。メソッドシグネチャにIOExceptionをスローする

私は、私がすでに作成したストリームを閉じるためにメソッド内で最後にスコープを使用することはできないことを知っています。 だから私のプログラムでこれらのストリームが閉じていることを確認してください。

ありがとうございます!

+3

なぜ 'throw IOException'がそのメソッドで' finally'の使用を排除していると思いますか? –

+2

'catch'を使わずに' finally'を使うことができます。 – Tunaki

+0

また、https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html –

答えて

0

tryを使用する場合は、catchブロックを持つ必要はありません。 finallyブロックを持つこともできます。 tryブロックでスローされた例外は、メソッドからスローされますが、例外が発生した場合でもブロックfinallyが実行されます。

public void myMethod() throws IOException { 
    InputStream in = new FileInputStream("..."); 
    try { 
     // Do stuff that might throw IOException 
    } finally { 
     in.close(); 
    } 
} 

しかし、try-with-resources建設(Javaの7以来の新機能)を使用することがはるかに優れている:

public void myMethod() throws IOException { 
    try (InputStream in = new FileInputStream("...")) { 
     // Do stuff that might throw IOException 
    } 
} 

あなたはこれを行う際に、明示的にInputStreamを閉じる必要はありません。自動的に発生します(例外が発生したかどうかに関わらず)。

in.close();もまたIOExceptionを投げてしまう可能性があり、finallyブロックから例外を投げることは一般的には悪い考えです)。

関連する問題