例外、あんまりおもしろくない。
例外とアサーション
例外の種類
- エラー : JVMがスロー
- 例外 : アプリケーションによるエラー。軽重ある。
- 実行時例外 : コンパイラのチェックが行われない(実行時の例外だから)。
これらをすべてエラーと呼んでいたので区別する。
チェック例外と非チェック例外は別の分類なので注意。RuntimeExceptionクラスまたはErrorクラスのサブクラスは非チェック例外、それ以外の例外はすべてチェック例外。
例外クラスを作る
ExceptionSample.java
class MyException extends Exception{
public MyException(String msg) {
super(msg);
}
public MyException(Throwable cause) {
super(cause);
}
}
class ExceptionSample {
public static void main(String[] args) {
try{
dosomething();
}
catch(MyException e){
e.printStackTrace();
}
}
static void dosomething() throws MyException{
// TODO 自動生成されたメソッド・スタブ
MyException e = new MyException("自作の例外処理");
throw e;
}
}
例外とオーバーライド
throws句がついたメソッドをオーバーライドする場合、同じ(サブクラスを含む)例外しか新たに宣言することができない。ポリモーフィズムでの不整合が起こらないようにするため。
アサーション(Assertion: 表明)
プログラムのバグをチェックするコードを埋め込む機能をアサーションという。基本的に開発時にON、運用時にはOFFにする。
AssertSample.java
public class AssertSample {
public static void main(String[] args) {
int num = -1;
assert num > 0 : "numは0以上である必要があります。";
}
}
Eclipseの場合,メニュー→実行構成→Javaアプリケーション→(x)=引数→VM 引数に -ea を書いて,実行。以下が実行結果。
Exception in thread "main" java.lang.AssertionError: numは0以上である必要があります。
at AssertSample.main(AssertSample.java:5)