【Java】例外処理の基本の復習

#目的

* Javaの例外処理を学んだので、復習のためにアウトプットする

#実際の手順と実例
###1. 例外処理とは

例外　＝＝　エラーのこと。
例外が発生したときに実行する処理を例外処理という。


###2.例外処理の基本

ここではカリキュラムの問題を再度実行して復習していきます。

その前の前提知識として、例外処理の基本構文から

**try-catch文（try-catch-finally文）**

````java
try {
    tryブロック（例外が発生する可能性がある処理）
} catch (例外クラス 変数名) {
    catchブロック（例外が発生した時に実行する処理）
} catch (例外クラス 変数名) {
    catchブロック（例外が発生した時に実行する処理）
} finally {
    finallyブロック(例外発生の有無にかかわらず必ず実行する処理)
}

````

**throw文**

意図的に例外を発生させたい場合に使用する（スローする）。

````java
// 例外インスタンスをスロー
throw 例外インスタンス;

// 例外インスタンスを生成してスロー
throw new 例外クラス;
````

**throws文**

throws文は例外が発生したcatch文を記述して、メソッド内で例外処理するのではなく、例外をスローして呼び出し元に例外処理をさせる場合に使用する。

````java
修飾子 戻り値の型 メソッド名(引数) throws 例外クラスの型 {
    // 処理
    return 戻り値;
}
```

文章だけではわからなかったので実際に例題を見ながら、理解を深めていきたいと思います。

###3.　例外処理の確認問題

####Q.「Practice.java」を実行した結果が以下になるように、プログラムを作成してください。

実行結果

````java
インデックス 2 の要素は 5 です
IllegalArgumentExceptionが発生しました
java.lang.IllegalArgumentException: 3 はサイズの範囲外です
    at practice.Chapter10.validIndex(Chapter10.java:xxxx)
    at practice.Chapter10.main(Chapter10.java:xxxx)
SQLExceptionが発生しました
java.sql.SQLException: SQLエラーです
    at practice.Chapter10.throwSQLException(Chapter10.java:xxxx)
    at practice.Chapter10.main(Chapter10.java:xxxx)
throwSQLExceptionの呼び出し終了
mainメソッド終了
````

Practice.java

`````java
package practice;

import java.sql.SQLException;

public class Practice {
    public static void main(String[] args) {

        try {
            int array[] = { 1, 3, 5 };
            Practice.validIndex(array, 2);
            Practice.validIndex(array, 3);

            System.out.println("validIndexの呼び出し終了");
        } catch (IllegalArgumentException e) {
            System.out.println("IllegalArgumentExceptionが発生しました");
            e.printStackTrace();
        }

        // try-catch文を記述
        // ・throwSQLExceptionメソッドを呼び出し
        // ・SQLExceptionをキャッチして、メッセージとスタックトレースを出力
        // ・"throwSQLExceptionの呼び出し終了"のメッセージを出力

        System.out.println("mainメソッド終了");
    }

    // validIndexメソッドを作成
    // ・indexがarrayのサイズの範囲内なら、インデックスの要素を出力
    // ・サイズの範囲外なら、IllegalArgumentExceptionをスロー

    public static void throwSQLException() throws SQLException {
        throw new SQLException("SQLエラーです");
    }
}
`````

####A.

````java
package practiceMethod;

import java.sql.SQLException;

public class Practice {
	public static void main(String[] args) throws SQLException {
//		try-catch文で例外を発生させる
		try {
//        	配列が３つのサイズ　それそれvalidIndexというメソッドを作成して定義
			int array[] = { 1, 3, 5 };
//          29行目からメソッド定義
			Practice.validIndex(array, 2);
			Practice.validIndex(array, 3);
//          例外が発生しなかった場合に出力
			System.out.println("validIndexの呼び出し終了");
//          例外クラス,変数名を引数に入力
		} catch (IllegalArgumentException e) {
//        	例外発生時に引数を出力する
			System.out.println("IllegalArgumentExceptionが発生しました");
			e.printStackTrace();
		}

		// try-catch文を記述/throwSQLExceptionメソッドを呼び出し
		try {
			throwSQLException();
			// ・SQLExceptionをキャッチして、メッセージとスタックトレースを出力
		} catch (SQLException s) {
			System.out.println("SQLエラーです");
//			下記のために6行目にthrows SQLExceptionを宣言 printStackTrace()で代用可
			throw s;
		}
		// ・"throwSQLExceptionの呼び出し終了"のメッセージを出力
		System.out.println("throwSQLExceptionの呼び出し終了");
		System.out.println("mainメソッド終了");
	}

	// validIndexメソッドを作成
	private static void validIndex(int[] array, int index) {
//    	if文で条件が合致した際に「 index はサイズの範囲外です」を出力する
//		配列のサイズはlengthメソッドを使用　列のサイズは3で3と条件に合致しているので下記の文が出力される
		if (array.length <= index) {
			// サイズの範囲外なら、IllegalArgumentExceptionをスロー
//			49行目のSQLExceptionを使用してスタックトレースを出力
			throw new IllegalArgumentException(index + "はサイズの範囲外です");
		}
		// indexがarrayのサイズの範囲内なら、インデックスの要素を出力
		System.out.println("インデックス" + index + "の要素は" + array[index] + "です");
	}

	public static void throwSQLException() throws SQLException {
		throw new SQLException("SQLエラーです");
	}
}

````