1

ピースJavaコードが与えられた場合:

class SampleExpcetion {
  public static void main(String args[]){
        try {
                 int a[]= new int[15];
                 a[5]= 30/0;
         } 
         catch(Exception e) {System.out.println("task completed");}  
         catch(ArithmeticException e) {System.out.println("task1 completed");}  
         catch(ArrayIndexOutOfBoundsException e) { System.out.println("task2 completed");}

         System.out.println("Rest of the code......");
   }
}  

このコードでコンパイル時エラーが発生するのはなぜですか?

4

7 に答える 7

2

最初の catch ブロックはすべての例外をキャッチするため、他のブロックには決して到達できません。

于 2013-02-06T08:21:23.710 に答える
2

catch(Exception e) {System.out.println("task completed");}すべての例外をキャッチするためです。

 catch(ArithmeticException e) {System.out.println("task1 completed");}  
 catch(ArrayIndexOutOfBoundsException e) { System.out.println("task2 completed");}

デッドコードです。

このように並べ替えるか、さらには削除することをお勧めします:catch(Exception e)

  catch(ArithmeticException e) {System.out.println("task1 completed");}  
  catch(ArrayIndexOutOfBoundsException e) { System.out.println("task2 completed");}
  catch(Exception e) {System.out.println("task completed");}  
于 2013-02-06T08:21:26.760 に答える
1

ブロックでは、後続のtry catchすべての catch ブロックで、catch ブロックにサブクラスの例外があってはなりません。それはデッドコードにつながります。

また、SE 7 では、チェックしたいすべてのタイプの例外を次のように指定できます。

catch (IOException|SQLException ex) {
    //...
}

NullPointerExceptionとは何かを理解しようとしていますか?

于 2013-02-06T08:30:07.607 に答える
1

コンパイラは、そのスーパークラスのArithmeticException 後にをキャッチできないことを認識しています。最初の catch 句は常に一致します。

于 2013-02-06T08:20:52.547 に答える
1

「例外 e」はすべての例外オブジェクトをキャッチできるため、他の catch ブロックには到達しません。これを「到達不能コード」と呼びます。Unreachable code は Java 言語のエラーです。

例: - 服が例外クラスで、サブクラスがある場合 -> シャツとズボン。シャツクラスの例外が発生したが、シャツの前に衣服でそれをキャッチしている場合、それは処理されているため、シャツの例外で次のキャッチブロックに到達することはありません. これにより、次の catch ブロックに到達できなくなります。

それが役に立てば幸い!!!

于 2014-05-28T10:32:54.577 に答える
0

ExceptionクラスはArithmeticExceptionandArrayIndexOutOfBoundsExceptionおよびその他の例外の親です。そのため、例外が発生し、then に catch が存在するException場合、これは間違いなくそれをキャッチします。したがって、その下に書かれている他の catch ブロックには到達できず、単に役に立たないだけです。そのため、到達不能なコードになり、一部のステートメントが到達不能な場合に JAVA がエラーを出すことがわかっています。したがって、コンパイル時エラーが発生します。

場合によっては、子例外の後に記述した場合、エラーなしでコンパイルされます。

于 2019-07-23T14:32:08.567 に答える