3種類のエラーと例外
研修の復習
***
エラー
プログラミングでは、3種類のエラーがあります。
- 書き間違えや変数が違いコンパイルすることができないコンパイルエラー、
- コンパイルは通るけど、実行すると異常終了してしまう実行時エラー、
- コンパイルも実行も通るけど、意図した動きをしてくれない論理エラー
上記3種類があります。
一つずつ見ていきましょう。
コンパイルエラー
その名の通りコンパイル時に発生するエラーです。
このエラーはプログラムを書き間違えている場合が殆どです。
開発環境のツールによっては、コンパイルする前におかしなところは教えてくれるものがあります。(私は今eclipceとAtomを使っていますがとてもわかりやすいです)
論理エラー
コンパイルにも実行時にも異常がないけど、処理結果が意図したものにならないことを言います。
計算結果がおかしい、等があたります。
解決にはコードの原因箇所を特定し、自身で修正する必要があります。
実行時エラー
「例外」とは実行時エラーのことを指します。
上記二つのエラーは開発者のミスによるものですが、実行時エラーは違います。
実行時エラーは開発者がソースコードを書く際に予防することができません。
そのため回避するには、エラーが発生時の対策を事前にコードに記述しておきます。
try catch構文
try{
例外が起きるかもしれない処理
} catch(例外クラス e){
例外クラスに対応する処理;
}finally{
例外の有無に関わらず行われる処理
}
「例外をキャッチする」ともいうそうです。
tryの中に、例外が起きる可能性のある処理を入れます。
正しい表示がされるまで繰り返したい
while(true)
try{
例外が起きるかもしれない処理
return;
} catch(例外クラス e){
例外クラスに対応する処理;
}
先ほどのtry catch構文にwhileを加えます。
これによって、trueの処理になるまでtryの中の処理を繰り返します。
もし、無制限でなく回数を指定したい場合はwhileの部分をfor( ... )に変えます。
独自の例外クラス
開発者が意図的に例外を発生させることができます。その際にはthrowが使われます。
「例外をスローする」と言ったりします。
throw new 任意のエラー名();
メソッド内にthrowを用いてエラーを記述します。
try{
例外が起きるかもしれない処理
★throw new UserException("エラーです");
return;
} catch(UserException e){
System.out.println(e.getMessage);
}
★のところで投げたエラーをcatchしています。
throwsリスト
throwsはthrowと違い、メソッドの定義に使われます。
例外処理を定義しておくことで、メソッドで処理をしないで良くなります。
修飾子 戻り値型 メソッド() throws 例外型{
}