たとえば、メソッドのシグネチャに例外をスローするとしましょう。例外はIOExceptionです。メソッドシグネチャにIOExceptionをスローする
私は、私がすでに作成したストリームを閉じるためにメソッド内で最後にスコープを使用することはできないことを知っています。 だから私のプログラムでこれらのストリームが閉じていることを確認してください。
ありがとうございます!
たとえば、メソッドのシグネチャに例外をスローするとしましょう。例外はIOExceptionです。メソッドシグネチャにIOExceptionをスローする
私は、私がすでに作成したストリームを閉じるためにメソッド内で最後にスコープを使用することはできないことを知っています。 だから私のプログラムでこれらのストリームが閉じていることを確認してください。
ありがとうございます!
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
ブロックから例外を投げることは一般的には悪い考えです)。
なぜ 'throw IOException'がそのメソッドで' finally'の使用を排除していると思いますか? –
'catch'を使わずに' finally'を使うことができます。 – Tunaki
また、https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html –