目的
- Javaの例外処理を学んだので、復習のためにアウトプットする
実際の手順と実例
1. 例外処理とは
例外 == エラーのこと。
例外が発生したときに実行する処理を例外処理という。
2.例外処理の基本
ここではカリキュラムの問題を再度実行して復習していきます。
その前の前提知識として、例外処理の基本構文から
try-catch文(try-catch-finally文)
try {
tryブロック(例外が発生する可能性がある処理)
} catch (例外クラス 変数名) {
catchブロック(例外が発生した時に実行する処理)
} catch (例外クラス 変数名) {
catchブロック(例外が発生した時に実行する処理)
} finally {
finallyブロック(例外発生の有無にかかわらず必ず実行する処理)
}
throw文
意図的に例外を発生させたい場合に使用する(スローする)。
// 例外インスタンスをスロー
throw 例外インスタンス;
// 例外インスタンスを生成してスロー
throw new 例外クラス;
throws文
throws文は例外が発生したcatch文を記述して、メソッド内で例外処理するのではなく、例外をスローして呼び出し元に例外処理をさせる場合に使用する。
修飾子 戻り値の型 メソッド名(引数) 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
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.
package practiceMethod;
import java.sql.SQLException;
public class Practice {
public static void main(String[] args) throws SQLException {
// try-catch文で例外を発生させる
try {
// 配列が3つのサイズ それそれ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エラーです");
}
}