例外とは予期しなかった処理のことを言います。

Java では例外が発生するとスレッドが終了します。単一スレッドの場合はプログラムが終了します。例外が発生してもスレッドを終了させたくない場合、次の2つのうちいずれかの方法を行います。

例外のキャッチ

例外が発生してもスレッドを終了させたくない場合、例外をキャッチする必要があります。

try {
  // 例外が発生する可能性のある処理
} catch (Exception e) {
  // 例外が発生したときに行う処理
}

tryブロック(try { })内で例外が発生すると、そこで処理を中断してcatchブロック(catch () { })に処理が移ります。

例外をキャッチすると、例外が発生したときに行う処理を記述することができます。通常、ここではリソースの解放やメソッドの戻り値の設定、エラーメッセージの表示などの処理を行います。

また、finallyブロックを使用すると、例外が発生しなかった場合と例外が発生した場合のいずれの場合にも最後に行う処理を記述することができる。

try {
    // 例外が発生する可能性のある処理
} catch (Exception e) {
    // 例外が発生したときに行う処理
} finally {
    // 最後に必ず行う処理
}

メソッドで例外のスロー宣言を行う

メソッドでスロー宣言を行うと、例外が発生したときに処理を中断して、メソッドの呼び出し側に処理を戻すことができます。

メソッドの呼び出し側ではスローされた例外が発生します。メソッドの呼び出し側で例外のキャッチを行っていなければ、そこでスレッドは終了します。例外をキャッチしていれば、例外に対するエラー処理を行うことができます。

public void myFunction() throws IOException, NumberFormatException
{
  // IOException例外または
  // NumberFormatException例外が
  // 発生する可能性がある処理
}

Exceptionの一覧

例外 説明
java.lang.NullPointerException nullオブジェクトにアクセスした
java.sql.SQLException JDBCパッケージがスローする例外

java.lang.Exceptionクラス

Exceptionクラスはjava.lang.Throwableクラスのサブクラスです。Exceptionクラスで使用できるメソッドについては、java.lang.Throwableクラスを参照してください。

java.lang.Errorクラス

Errorクラスはjava.lang.Throwableクラスのサブクラスです。Errorクラスで使用できるメソッドについては、java.lang.Throwableクラスを参照してください。

java.lang.Throwableクラス

java.lang.Throwableクラスのメソッド
戻り値の型 メソッド 説明
String getMessage() 詳細メッセージ文字列を返す。
void printStackTrace() バックトレースを標準エラーストリームに出力する。
void printStackTrace(PrintStream s ) バックトレースを指定した印刷ストリームに出力する。
void printStackTrace(PrintWriter s ) バックトレースを指定したプリントライターに出力する。

Throwableクラスは、java.lang.Exceptionクラスおよびjava.lang.Errorクラスのスーパークラスです。

Throwableクラスでよく使われるメソッドの一覧を次に示します。

独自の例外クラスを作成する

java.lang.Exceptionクラスを継承して、独自の例外クラスを作成することができます。

class MyException extends Exception {
  public MyException() {
    super();
  }
}

例外をスローする

例外またはエラーを明示的にスローすることができます。スローできるのは java.lang.Throwableクラスの派生クラスだけです。

throw Throwableクラスの派生クラス名;

独自の例外クラスMyExceptionをスローするJavaソースコードの例を次に示します。

throw MyException;

java.lang.NullPointerException

NullPointerExceptionは、nullオブジェクトにアクセスしたときにスローされる例外である。

NullPointerExceptionが発生するプログラムの例を示す。

public class NullPointerExceptionExample1 {
  public String foo = "NullPointerExceptionExample1";

  public static void main(String[] args) {
    NullPointerExceptionExample1 npee1 = null;
    System.out.println(npee1.foo);
  }
}
public class NullPointerExceptionExample2 {
  public static void main(String[] args) {
    NullPointerExceptionExample1 npee2 = null;
    npee2.foo();
  }

  public void foo() {
    System.out.println("NullPointerExceptionExample2");
  }
}
スポンサーリンク