16 例外 (try & catch)

| コメント(0)
次のサンプルを コンパイル、実行 をしてみよう。

public class Sample {
    public static void main(String[] args) {
        String s = args[0];
        int a = Integer.parseInt(s);
        System.out.println(a);
    }
}

java Sample 5 と引数に数値なら正常ですが、
java Sample a と引数が数値以外だとエラーになる
  、、NumberFormatException: For input string:
Integer.parseInt(s)で "a" を int型に変換しようとしている。

このように、コンパイルではエラーにならないが予想外のエラーを
例外(Exception) と呼んでいる。

数値を0で割ったり、メモリーオーバーになったり、存在しないファイルを開けたり、
プログラムがエラーで途中に止まってしまわないようにする仕組みが try と catch である。
tyr&catch.bmp
上記のサンプルは次のように書かなければならない。
public class Sample {
    public static void main(String[] args) {
        String s = args[0];
        try {
            int a = Integer.parseInt(s);
            System.out.println(a);
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

※finally は省略可能です。

問題16
他に例外が発生する場合は何があるだろうか?
---------------------------------------------------------------------------------------------------
下記が例外のクラス一覧。

ArithmeticException
0で割り算をした
ArrayStoreException
配列の型に対して、代入不可能な型のデータが代入された
ClassCastException
キャスト型が不正(代入不能な型にキャスト)
NumberFormatException
Integer.parseInt( String ); で文字列を数値に変換しようとした
IndexOutOfBoundsException
配列添字が配列サイズを越えたり負であったりする。
NullPointerException
インスタンスでnewをしていない変数にアクセスした場合
null を返す関数戻り値の null チェックをしていない場合

ClassNotFoundException
IllegalAccessException
InstantiationException
これら3つは、メタクラスオブジェクトを使って動的にインスタンスを生成するときに発生する

InterruptedException
マルチスレッドプログラムの時に、明示的にスレッドに対して割り込みをかける時に使う例外
IOException
IO出力処理の失敗を一般に示す例外である
FileNotFoundException
ファイルが見つからない場合
EOFException
ファイルの入出力中に終了(EOF)を検出した

Exception は全てのエラーをキャッチします。
だから   } catch (Exception e) {    ならとりあえずOKです。
javaがスラスラ書けるようになったらそれぞれのエラーを使おう。

コメントする