LoginSignup
2
2

More than 5 years have passed since last update.

Java学習ノート_140716(例外とアサーション)

Posted at

例外、あんまりおもしろくない。

例外とアサーション

例外の種類

  • エラー : 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)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2