例外をスローさせてみる - 萌えJava超入門
第十九章 Exception(例外)

例外をスローさせてみる

実際に例外をスローさせてみましょう。


目次


1.例外をスローさせてみる


例外をスローさせるとどんな感じか見てみましょう。
ここでは、配列で例外をスローさせてみることにします。

パソコン壊れたり
しないっスか?



今までもソースコードを試して
上手くいかないと変なメッセージ
出てただろ?




あ~。
あれが「例外」なのね。
//Sample19_01.java
class Sample19_01{
    public static void main(String[] args){
        int[] intArray = new int[10]; //1
        for(int i=0; i<10; i++){
            intArray[i] = i; //2
        }
        for(int i=0; i<10; i++){
            System.out.println("value: " + intArray[i]); //3
        }

        System.out.println(intArray[10]);//4 ここで例外スロー

        System.out.println("complete"); //5
    }
}


コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample19_01.java
ws>java Sample19_01
value: 0
value: 1
value: 2
value: 3
value: 4
value: 5
value: 6
value: 7
value: 8
value: 9
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        at Sample19_01.main(Sample19_01.java:12)


コンパイル自体は問題なくできました。
java コマンドで実行すると以下のような流れで強制終了されました。
  1. intArrayを、要素数 10コの配列として初期化します。
  2. 0~9 までの値を各要素に代入しています。
  3. 代入した各要素の値を、「value: 値」 の形で表示させました。
  4. インデックス 10を参照しようとしましたが、
    intArrayにはそのような要素がありません。
    Java仮想マシンが例外をスローしました。
    プログラムはここで強制終了しました。
  5. System.out.println("complete"); は実行されません。
今まで「変なの出た~!」
くらいにしか思ってなかったっすけど、
これが例外なんスね。
Java仮想マシンは、不正な処理を検出した時に例外をスローします。
例外には種類があって、今回の例外は
ArrayIndexOutOfBoundsException
   (配列で範囲外のインデックスを参照した例外)
という長い名前の例外です。
RuntimeExceptionクラス(非チェック例外)の仲間ですね。



2.コンパイルエラー


ちなみに、コンパイルエラーの例も見てみましょう。
ここでも、配列でコンパイルエラーを発生させてみます。

今度はコンパイルエラーだ。
前のページで説明した通り
例外とは違う。
//Sample19_02.java
class Sample19_02{
    public static void main(String[] args){
        int[] intArray;
        System.out.println(intArray[0]);// ここでコンパイルエラー
        System.out.println("complete");
    }
}


コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample19_02.java
Sample19_02.java:5: エラー: 変数intArrayは初期化されていない可能性があります
        System.out.println(intArray[0]);
                           ^
エラー1個


初期化されていない intArray の要素を参照しようとしました。
これは無理です。
コンパイルできませんでした。

なるほど。
「なんとかエクセプション」じゃ
ないわね。
javac コマンドで
コンパイルしたときに発生する
エラーだな。
コンパイルエラーは、文法が間違っている場合などに発生するので、
当然ですがプログラムで制御することはできません。
間違っているところを直しましょう。



お疲れ様でした。




© 2019 awasekagami