例外に関する初歩的な事項についてのメモ

Contents

  1. 上位例外 Exception による全例外の捕捉
  2. Exception として捕捉され再度投げられても、元々の例外をして捕捉できる
  3. 例外を捕捉しなかったら
  4. 例外を捕捉したらその例外はなくなる

  1. 上位例外 Exception による全例外の捕捉

     個別の例外としてではなく、その上位例外である Exceptioncatch することで全ての例外を捕捉することができます。

    int foo(int value) throws Exception
    {
    try {
    int ans = 100/value; ← @ value が 0 のとき ArithmeticException が発生する。
    return ans;
    } catch (Exception e) { ← A ArithmeticException も Exception で捕捉できる。
    throw e;
    }
    }


  2. Exception として捕捉され再度投げられても、元々の例外をして捕捉できる

     上述のように Exception として捕捉され再度投げられても、元々の例外として捕捉できます。

    int foo(int value) throws Exception ← Exception を投げると宣言
    {
    try {
    int ans = 100/value; ← @ value が 0 のとき ArithmeticException が発生する。
    return ans;
    } catch (Exception e) { ← A Exception として捕捉する。
    throw e; ← B そのまま投げる。
    }
    }

    int bar(int value) throws ArithmeticException
    {
    try {
    int ans = foo(value); ← C value が 0 のとき例外が発生する。
    return ans;
    } catch (ArithmeticException e) { ← D AritmeticException として捕捉できる。
    throw e;
    }
    }


  3. 例外を捕捉しなかったら

     例外を捕捉(catch)しなかったら、処理はそこで打ち切られ、そのまま呼び元に例外が伝えられます。

    int foo(int value) throws Exception
    {
    try {
    int ans = 100/value; ← @ value が 0 のとき ArithmeticException が発生する。
    return ans;
    } catch (Exception e) { ← A Exception として捕捉する。
    throw e; ← B そのまま投げる。
    }
    }

    int bar(int value) throws Exception ← このメソッドでは例外を捕捉しない。
    {
    int ans = foo(value); ← C value が 0 のとき例外が発生する。
    return ans; ← D このステップは実行されない。
    }

    int hoge(int value) throws Exception
    {
    try {
    int ans = bar(value); ← E value が 0 のとき例外が発生する。
    return ans;
    } catch (Exception e) { ← F bar() 内で発生した例外は捕捉できる。
    throw e;
    }
    }


  4. 例外を捕捉したらその例外はなくなる

     例外を捕捉(chatch)したら、その例外は無くなります。
    その例外をさらに呼び元に伝えたい場合は、投げ直さなければなりません。

    int bar(int value) throws Exception
    {
    try {
    int ans = foo(value); ← @ ここで何らかの例外が発生したとする。
    return ans;
    } catch (ArithmeticException e) { ← A ArithmeticException の場合は
    return -1; ← B -1 を返し、それ以上例外とはしない。
    } catch (Exception e) { ← C その他の例外の場合は
    throw e; ← D そのまま投げる。
    }
    }