try
-構文では、とcatch
の catch ステートメントがどの順序で記述されているかは重要ですか?FileNotFoundException
IOExceptipon
8 に答える
はい、特定の例外を最初に記述し、その後でより広く記述する必要があります。
最初に部屋にいるすべての動物に電話をかけ、外に人間がいるかどうかを確認しようとするようなものです
例えば
try{
//do something
}catch(Exception ex){
}catch(NullPointerException npe){
}
コンパイル時エラーが発生します
はい。FileNotFoundException は IOException から継承されます。例外のサブクラスを最初にキャッチする必要があります。
特定の例外は、一般的な例外の前にキャッチする必要があります。そうしないと、到達不能コード エラーが発生します。例えば -
try{
//do something
}catch(NullPointerException npe){
}catch(NumberFormatException nfe){
}catch(Exception exp){
}
またはcatchException
ブロックの前に catch ブロックを置くと、コンパイル時エラーが発生します。(到達不能なコード)。NullPointerException
NumberFormatException
正直なところ、そもそもこれらすべてのキャッチブロックが必要かどうかをよく考えてみることをお勧めします。それぞれのケースに異なる方法で意味のある処理を提供するつもりですか?メッセージを印刷するだけの場合は、それをキャッチIOException
することしかできません。
まあ...サブクラスからスーパークラスへ...それが理想的な方法です..そうしないと、到達不能コードエラーが発生します
はい、もちろん。より具体的な例外は最初のcatchブロックにcatch(Exception ex){ex.printStackTrace();}
書き込む必要があり、のような一般的な例外はcatchブロックの最後のセットに書き込む必要があります。
他の方法を試してみると、JVMコンパイラが特定の例外に到達できなくなります。
IOException
のスーパークラスですFileNotFoundException
。したがって、 for の上に forステートメントを配置すると、2 番目のcatchのコードに到達できなくなり、コンパイラはfor をスローします。理由は簡単です。IOException
FileNotFoundException
error
every object of a sub class can be easily accepted by a super class reference
IOException は FileNotFoundException のスーパークラスです。そのため、最初にサブクラス、つまり FileNotFoundException をキャッチしてから、IOException をキャッチする必要があります。
例えば、
try{
// something
} catch(FileNotFoundException fne){
// Handle the exception here
} catch(IOException ioe) {
// Handle the IOException here
}