練習問題 解答
8.6 練習問題 解答
問1
① ×:対応する例外クラスがcatchブロックに設定されていないと処理は行われない。
② ○:finallyブロックは、例外発生の有無に関わらず必ず処理されます。
③ ×:例外クラスの下位クラスから上位クラスの順に並べないと、コンパイルエラーになります。
④ ○:変数から例外クラスの情報を取得することができます。
⑤ ×: 例外には必ず処理しないといけないチェック例外が存在します。
問2
③ 「Yellow」を表示する前の処理で例外が発生します。
問3
① ×:この例外が発生するクラスは利用していない。
② ○:入力数値が無い(1回目で999を入力)場合発生します。
③ ○:1つ目の繰り返し処理の条件が間違っているため、4回目の数値入力で発生します。
④ ×:型を変換するような処理を行っていない。
⑤ ○:intデータしかキーボード入力を受けつけないので、整数値以外を入力すると発生します。
問4
Practice0801.java
※例外処理を追加した部分のみを記載しています。その他問3のSample.javaと同じです。
7 | System.out.print( "数値を入力して下さい。(999で強制終了)>" ); |
8 | int tmpNum = sin.nextInt(); |
16 | } catch (InputMismatchException e){ |
17 | System.out.println( "→「文字が入力されました。整数を入力して下さい。」\n" ); |
解説
まずはwhileブロック内の処理全てをtryブロックで囲んでいます。そしてcatchの()内に処理する例外クラス「InputMismatchException」を指定しています。catchブロック内では画面にメッセージを出力し、「sin.next();」メソッドを利用してバッファのクリアを行っています。
catchブロックの処理が終っても処理自体がwhile内なので、繰り返し処理の先頭に戻り再入力を促します。
問5
Practice0802.java
※例外処理を追加した部分のみを記載しています。その他問題8-3のSample.javaと同じです。
1 | package jp.co.f1.basic.ch08exercise; |
5 | public class Practice0802 { |
6 | public static void main(String[] args) { |
16 | System.out.println( "入力数は" + cnt + "です。" ); |
17 | System.out.println( "合計点は" + sum + "です。" ); |
18 | System.out.println( "平均点は" + ave + "です。" ); |
20 | System.out.println(e+ "という例外が発生しました。" ); |
解説
まずはメインメソッド内の処理全てをtryブロックで囲んでいます。そしてcatchの()内に全ての例外を処理する例外クラス「Exception」を指定しています。catchブロック内では例外のオブジェクトを指し示す変数「e」を利用して、例外の詳細情報を画面に表示します。catch以降の処理は無いのでこのまま処理が終了します。
NEXT>> 9 クラスライブラリ