22‐1
	      A
	  ____|____
	 |         |
	 B         C
	 |       __|___
	(X)     |      |
	       (Y)     D
	               |
	              (Z)

(1) 上記図は例外クラスの継承関係の図です。AからDに当てはまる例外クラスを答えなさい。
(2) 上記図で、例外に対する対処がないとコンパイルが通らない系列は(X)から(Z)のうちどれですか?
(3) (2)の系列の例外を何といいますか?
(4) (2)の系列以外の例外を何といいますか?

22‐2
次のクラスをコンパイルするとエラーになります。その理由を答えなさい。
ヒント:Thread.sleep()はInterruptedExceptionという例外を発生する可能性があり、これはExceptionの直接のサブクラス。
------------------------------------------------------------------------
class Exer22_02 {
	void met(){
		System.out.println("start");
		Thread.sleep(3000);
		System.out.println("end");
	}
}
------------------------------------------------------------------------

22‐3
上記Exer22_02をtry ... catchを使ってコンパイルが通るように修正し、Exer22_03というクラスを作成しなさい。なお、tryで囲むのは最小限の処理にしなさい。
また、例外発生時の処理は例外情報を出力するだけでよい。

22‐4
上記Exer22_03のインスタンスを生成し、そのmet()メソッドを呼び出すという処理を行うExer22_04というクラスを作成・コンパイル・実行しなさい。

22‐5
上記Exer22_02をthrowsを使ってコンパイルが通るように修正し、Exer22_05というクラスを作成しなさい。

22‐6
上記Exer22_05のインスタンスを生成し、そのmet()メソッドを呼び出すという処理を行うExer22_06というクラスを作成・コンパイル・実行しなさい。

22‐7
下記のクラスは実行時のコマンドライン引数によって、次の3つの例外を発生する可能性があります。
・コマンドライン引数を指定しなかった場合 … ArrayIndexOutOfBoundsException(配列の存在しない添字番号を使用した)
・数字でないものを指定した場合 … NumberFormatException(数字に変更できなかった)
・0を指定した場合 … ArithmeticException(0で割り算をした)
・1桁の数字を指定した場合 … StringIndexOutOfBoundsException(文字列の存在しない添字番号を使用した)
これらはすべてExceptionのサブクラスです。
------------------------------------------------------------------------
class Exer22_07 {
	public static void main(String[] args){
		int num = Integer.parseInt(args[0]);
		System.out.println("1000を割った結果 : " + 1000 / num);
		System.out.println("2桁目の数字 : " + args[0].charAt(1));
	}
}
------------------------------------------------------------------------
上記クラスは例外対処をしていませんが、次のように例外対処をしなさい。
また、args[0].charAt(1)の部分は気にしないでください。
・ArrayIndexOutOfBoundsExceptionが発生した場合は、"コマンドライン引数を指定して下さい"と出力する。
・NumberFormatExceptionが発生した場合は、"数字を指定して下さい"と出力する。
・それ以外の例外が発生した場合は"2桁以上の数字を指定して下さい"と出力する。

22‐8
次のクラスをコンパイルするとエラーになります。その理由を答えなさい。また、コンパイルが成功するように修正しなさい。
------------------------------------------------------------------------
class Exer22_08 {
	public static void main(String[] args){
		try{
			int num = Integer.parseInt(args[0]);
			System.out.println("1000を割った結果 : " + 1000 / num);
			System.out.println("2桁目の数字 : " + args[0].charAt(1));
		}catch(Exception ex){
			ex.printStackTrace();
		}catch(StringIndexOutOfBoundsException ex){
			ex.printStackTrace();
		}
	}
}
------------------------------------------------------------------------