【Java】独自の例外を作成する (How to create Custom Exceptions)

独自例外

例外に関するメモ

1. RuntimeExceptionを継承すれば、catchしたり、メソッドのthrowsリストに指定する必要はなくなる
 * ThrowableのサブクラスErrorとRuntimeExceptionは、例外処理は任意であるため
 * 逆に、それ以外のサブクラスは、コンパイル時にチェックされるため、例外処理は必須である

2. 独自ライブラリを提供する場合は、独自ライブラリの例外へ置き換えて投げるように設計することがある。
 * 何が原因で例外が発生したのかを把握できるようにするため
 * Throwableを引数に持つコンストラクタを用意する

作成方法例

Eclipseで例外クラスを定義する。
なお、以下を参考にした。
http://www.atmarkit.co.jp/fjava/rensai3/eclipsejava2_04/eclipse2_04_1.html

手順

1. Javaプロジェクトを右クリックし、[New]-[Package]で、[New Java Package]ダイアログを表示
2. パッケージ名をを入力(ここでは、「CustomExceptions」とする)し、[Finish]ボタンを押下
3. Javaプロジェクトを右クリックし、[New]-[Class]で、[New Java Class]ダイアログを表示
4. クラス名をを入力(ここでは、「CustomException」とする)
5. [Superclass]欄の[Browse_]ボタンを押下し、[Superclass Selection]ダイアログを表示
6. [Choose a type]欄に「Exception」と入力し、[OK]ボタンをクリック
7[New Java Class]ダイアログの[Superclass]欄に「java.lang.Exception」が
 自動入力されていることを確認し、[Finish]ボタンを押下
8. 以下のように、mainメソッドを生成していないことを確認

package CustomExceptions;

public class CustomException extends Exception {

}

サンプル

CustomException.java

独自例外クラス
package CustomExceptions;

public class CustomException extends Exception { // ☆★例外を継承★☆
	private static final long serialVersionUID = 1L;
	private int code;
	
	public CustomException(int code, String message) {
      super(message);
      this.code = code;
    }
	
    public int getCode() {
    	return code;
  }
}

callCustomException.java

独自例外を組み込んだ自作ライブラリ
package CustomExceptions;

public class callCustomException {
	public callCustomException() {
	}
	
	public void callException(int code, String message)
		throws CustomException { // ☆★例外を投げることを指定★☆
		
		if (code < 0) {
			throw new CustomException(code,  message); // ☆★ここで受け取って、例外を投げる(newしている)★☆
		}
		
		return;
	}
}

studyMain.java

メイン
import CustomExceptions.*;

public class studyMain {
	public static void main(String args[]) {
		callCustomException obj = new callCustomException();
		try {
			obj.callException(-1, "Don't call me!!" ); // ☆★無理やり呼ぶ★☆
		} catch (CustomException e) {
			e.printStackTrace();
		}
		
		return;
	}
}

出力

CustomExceptions.CustomException: Don't call me!!
	at CustomExceptions.callCustomException.callException(callCustomException.java:11)
	at studyMain.main(studyMain.java:7)


関連記事

例外について ~Exception~

http://blogs.yahoo.co.jp/dk521123/33440704.html