FileNotFoundExceptionはどういうわけかIOExceptionの「サブ例外」ですか?
これは、指定されたパスにあるファイルへの入力ストリームを開く私のコードです。
method(){
FileInputStream fs;
try {
fs = new FileInputStream(path);
//
fs.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
FileNotFoundを無視して、代わりにIOExceptionをキャッチできるのはなぜですか? FNFExceptionはIOExceptionの一部ですか?
例外をキャッチする代わりに、メソッドでIOExceptionをスローした場合はどうなりますか?
method() throws IOException{
FileInputStream fs;
fs = new FileInputStream(path);
//
fs.close();
}
このような呼び出しメソッドでFileNotFoundExceptionのキャッチに進むことはできますか?
try {
method();
}catch (FileNotFoundException e1) {}
あなたが提供できるかもしれないどんな助けにも感謝します!
FileNotFoundExceptionはどういうわけかIOExceptionの「サブ例外」ですか?
はい、 FileNotFoundException
extendsIOException
:
Java.lang.Object Java.lang.Throwable Java.lang.Exception Java.io.IOException Java.io.FileNotFoundException
FileNotFoundを無視して、代わりにIOExceptionをキャッチできるのはなぜですか?
スローされる例外の基本クラスをキャッチすると、より具体的なcatch
句が使用可能でない限り、例外がキャッチされます。
このような呼び出しメソッドでFileNotFoundExceptionのキャッチに進むことはできますか?
絶対に!実際、これは良いことです。コードは、処理方法を知っている例外のみを処理し、他のすべての例外をより適切な方法で処理できる場所に伝播させる必要があります。
はい、そうです。
継承を見ると、FileNotFoundException
はIOException
のサブクラスです。スーパークラスをキャッチすることで、それを拡張するものもキャッチします。
別の方法で処理する必要がある場合は、最初の例のように、より具体的なものを最初にキャッチできます。
Java 7以降、次のことができます。
catch(ExceptionType1 | ExceptionType2 e)
複数の例外のキャッチを実行します。ただし、あなたの場合は、あなたが提案するように、IOExceptionをキャッチすることができます。
FileNotFoundExceptionはどういうわけかIOExceptionの「サブ例外」ですか?
そうです 。
例外をキャッチする代わりに、メソッドでIOExceptionをスローした場合はどうなりますか?
あなたはそうすることができます。メソッドが例外をスローすると、特にこの例外またはそれを継承する例外をスローできます。
このような呼び出しメソッドでFileNotFoundExceptionのキャッチに進むことはできますか?
はい。メソッドがA
をスローすることを宣言している場合、B
がB
を継承すれば、A
をキャッチできます(B
がスローされない場合でも) A
明示的に)。
サイドノート:
最初のポイントは非常に重要です。 try
ブロックで.close()
;ファイルを正常に開くことができても、ファイルからの読み取りに失敗した場合など、.close()
はnotが呼び出されます。やったほうがいい:
FileInputStream in = ...;
try {
// operate on "in"
} finally {
in.close();
}
Java 7の場合:
try (
FileInputStream in = ...;
) {
// operate on "in"
}
// "in" is closed for you here
はい、 javadoc が示すように、FileNotFoundException
はIOException
のサブクラスです。
本当にFileNotFoundException
が必要な場合は、この実行のみをキャッチする必要があります。そうしないと、IOException
をキャッチすると、他の多くのFileNotFoundException
のように、それをサブクラス化する例外もキャッチされます。