※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

基本 例外


1.例外処理基本
  • 発生した例外がcatchに見つからない場合、コール元のcatchを探す。(自動ネストになる)
  • catchブロックは、処理したい例外の数分、複数ブロック記述できる
  • catchで処理できない例外が発生した場合、プログラムエラー終了
  • catchブロック以降の処理は、tryブロックが正常に進んだ後、またはtryで例外が発生しchatchブロックの処理が終わった後に実行される。
  • 通常、例外のクラス=catchする例外(クラス)名、変数名=e
try {
 例外の発生が予測される文;
 ・・・
}
catch(例外のクラス 変数名){
 例外が起きたときに処理;
 ・・・
}

2.例外処理finally
  • finallyブロックは、tryが正常、tryで例外発生しcatchで処理、tryで例外が発生しcatchせずのいずれのパターンでも必ず最後に実行される。
try {
 例外の発生が予測される文;
 ・・・
}
catch(例外のクラス 変数名){
 例外が起きたときに処理;
 ・・・
}
finally{
 必ず最後に処理;
}

3.例外クラス
  • 例外はjava.langのThrowableクラスのサブクラスのオブジェクト。それ以外は受け取れない。
  • クラス階層
 Throwable--+--Error
            +--Exception--+--IOException  etc.
                          +--RuntimeException --+-- 
  • Errorはプログラムが実行不能となるエラー。例外処理対象外。
  • Exceptionは例外処理対象。最上位のため、このクラスを指定するとすべての例外をcatch可。

4.例外スルー
  • Throwableクラスのサブクラスを拡張して例外クラスを宣言
class AbcException extends Exception
{
}
  • 例外スルーメソッド宣言
戻り値の型 メソッド名(引数リスト) throws 例外クラス
  • 例外スルー
throw 例外オブジェクト変数;
public void abc(int a) throws AbcException
{
 if(条件){
   AbcException e = new AbcException();
   throw e;
 }
}

5.例外を上位に報告
  • 例外をそのまま上位にスルー
public void def(int x) throws AbcException
{
 例外の発生が予測される文;
}

6.例外処理まとめ
  • メソッドの例外処理は2つ
  1. try~catchを使用して、メソッド内で例外処理
  2. throwsで上位メソッドに例外を報告。上位おまかせ。

7.例外処理が不要なクラス
  • Errorのサブクラス:プログラムの実行停止
  • RuntimeExceptionのサブクラス:上の同じ理由か?