10

try-構文では、とcatchの catch ステートメントがどの順序で記述されているかは重要ですか?FileNotFoundExceptionIOExceptipon

4

8 に答える 8

11

はい、特定の例外を最初に記述し、その後でより広く記述する必要があります。

最初に部屋にいるすべての動物に電話をかけ、外に人間がいるかどうかを確認しようとするようなものです

例えば

try{
  //do something
}catch(Exception ex){

}catch(NullPointerException npe){

}

コンパイル時エラーが発生します

于 2012-07-26T10:21:19.010 に答える
9

はい。FileNotFoundException は IOException から継承されます。例外のサブクラスを最初にキャッチする必要があります。

于 2012-07-26T10:20:48.437 に答える
4

特定の例外は、一般的な例外の前にキャッチする必要があります。そうしないと、到達不能コード エラーが発生します。例えば ​​-

try{
  //do something
}catch(NullPointerException npe){

}catch(NumberFormatException nfe){

}catch(Exception exp){

}

またはcatchExceptionブロックの前に catch ブロックを置くと、コンパイル時エラーが発生します。(到達不能なコード)。NullPointerExceptionNumberFormatException

于 2012-07-26T10:27:19.577 に答える
2

正直なところ、そもそもこれらすべてのキャッチブロックが必要かどうかをよく考えてみることをお勧めします。それぞれのケースに異なる方法で意味のある処理を提供するつもりですか?メッセージを印刷するだけの場合は、それをキャッチIOExceptionすることしかできません。

于 2012-07-26T10:23:39.683 に答える
1

まあ...サブクラスからスーパークラスへ...それが理想的な方法です..そうしないと、到達不能コードエラーが発生します

于 2012-07-26T10:22:00.340 に答える
0

はい、もちろん。より具体的な例外は最初のcatchブロックにcatch(Exception ex){ex.printStackTrace();}書き込む必要があり、のような一般的な例外はcatchブロックの最後のセットに書き込む必要があります。

他の方法を試してみると、JVMコンパイラが特定の例外に到達できなくなります。

于 2012-07-26T10:24:23.530 に答える
0

IOExceptionのスーパークラスですFileNotFoundException。したがって、 for の上に forステートメントを配置すると、2 番目のcatchのコードに到達できなくなり、コンパイラはfor をスローします。理由は簡単です。IOExceptionFileNotFoundExceptionerrorevery object of a sub class can be easily accepted by a super class reference

于 2012-07-26T10:24:47.783 に答える
0

IOException は FileNotFoundException のスーパークラスです。そのため、最初にサブクラス、つまり FileNotFoundException をキャッチしてから、IOException をキャッチする必要があります。

例えば、

try{
      // something
   } catch(FileNotFoundException fne){
      // Handle the exception here
   } catch(IOException ioe) {
      // Handle the IOException here
   }
于 2015-04-09T10:44:03.267 に答える