こんにちはペンすけです!
前回は夢の国でオブジェクト指向を考える記事を書きました▼▼
ペンすけ
コンパイルは通るのに、実行時にプログラムが止まってしまうことがある…。
今回は、個人的に一番沼った ユーザー定義の例外処理 について整理していきます!
ユーザー定義は3ステップで解決!
次に、本題のユーザー定義の例外処理の作り方について、前回のアトラクションの待ち時間を例にとって整理しましょう!
ペンすけ
アトラクションの待ち時間は5分刻みだね。
5の倍数以外の待ち時間にならないような、ユーザー定義の例外処理を考えてみよう!
1. ユーザー定義の例外処理クラスを作成!
ペンすけ
ユーザー定義の例外処理クラスで気を付けることは次の2点!
- 例外クラスであることを表すために、 extends Exception を付けること!
- コンストラクタの内容は super(msg) にする!
ここでは、WaiTimeExceptionを自分で作った例外としています。
待ち時間が5の倍数でないときに例外処理を起動し、実行を止めるクラスです。
public class WaitTimeException extends Exception {
public WaitTimeException(String msg) {
super(msg);
}
}
2. catch文に例外処理の記述!
ペンすけ
ここは通常の例外処理と同じ書き方でOK!
try{
// 待ち時間の処理
}
catch (WaitTimeException e){
System.out.println(e.getMessage());
}
3. throwで例外処理を投げる!
ペンすけ
ここがポイント!!
条件に合わない処理の場合に、 例外処理が起こるよう自分で記述 する!
- throw new [自分で名前を付けた例外処理名](“例外メッセージ”);
// 5の倍数でないなら例外処理を行う
if(0 != waitTime % 5){
throw new WaitTimeException("待ち時間が不正です。");
}
ソースコード全体
WaitTimeExceptionクラス
public class WaitTimeException extends Exception {
public WaitTimeException(String msg) {
super(msg);
}
}
Mainクラス
class Main{
public static void main(String[] args){
Attraction attraction = new Attraction("絶叫バイキング", "パイレーツエリア", 35);
try {
int waitTime = 20;
// 5の倍数でないなら例外処理を行う
if(0 != waitTime % 5){
throw new WaitTimeException("待ち時間が不正です。");
}
attraction.setWaitTime(waitTime);
attraction.printInfo();
}
catch (WaitTimeException e){
System.out.println(e.getMessage());
}
}
}
コメント