こんにちは!
この記事ではJavaの例外の種類とその処理の方法を説明します。
Javaでのプログラミングでは例外処理は避けられないのでしっかり理解しましょう。
Javaの例外とは
Javaにおける例外(Exception)は、プログラム実行中に発生する予期せぬ状況を表します。
例外は大きく分けて以下の二つがあります。
- チェックされる例外(Checked Exceptions)
- チェックされない例外(Unchecked Exceptions)
まずはこれら二種類の例外について解説していきます。
Checked Exceptions
これらはExceptionクラスから派生していて、コンパイラによってチェックされます。
なので Checked Exceptionに分類されます。
(Exceptionクラスについてはこちらを参照)
チェックされるというのは、例外の発生をコンパイラが見つけられるということです。
例:IOException・SQLExceptionなど
Unchecked Exceptions
これらはRuntimeExceptionクラスから派生しており、コンパイラによるチェックはありません。
実行時例外と呼ばれます。
例:NullPointerException・ArrayIndexOutOfBoundsExceptionなど
- コンパイル時に気づくのがChecked Exceptions
- 実行時に気づくのが Unchecked Exception
例外処理
例外処理の基本
Javaでの例外処理の方法を見ていきます。基本的にtry catch文を使用して例外を処理します。
まずはtry catch文の構文を紹介します。
try {
// 例外が発生する可能性のあるコード
} catch (ExceptionType name) {
// 例外が発生した場合の処理
}
この構文をもとに具体的なコード例を見てみましょう。
try {
FileInputStream file = new FileInputStream("example.txt");
int data = file.read();
while(data != -1) {
System.out.print((char) data);
data = file.read();
}
file.close();
} catch (FileNotFoundException e) {
System.out.println("ファイルが見つかりません。");
} catch (IOException e) {
System.out.println("I/Oエラーが発生しました。");
}
上記コードではtryブロックの中でファイルを開いて読み込み、内容を出力しています。
この際、FileNotFoundException(ファイルが見つからない)や、IOException(入出力時の例外)が発生する可能性があります。
なのでこれらの例外が発生した時の処理をcatch文であらかじめ記述しておきます。
今回の例では、FileNotFoundExceptionが発生した場合は「ファイルが見つかりません」と出力し、
IOExceptionが発生した場合は「I/Oエラーが発生しました」と出力しています。
finallyブロック
try catch文は最後にfinallyブロックをつけることも多いです。
finallyブロックに記述された内容は、例外発生の有無に関わらず必ず実行されます。
構文は次の通りです。
try {
// 例外が発生する可能性のある処理
} catch (ExceptionType name) {
// 例外処理
} finally {
// 必ず実行する処理
}
例外のスローとカスタム例外
例外は自分で定義することもできます。その例を見てみましょう。
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public class Main {
public static void main(String[] args) {
try {
throw new CustomException("カスタム例外が発生しました");
} catch (CustomException e) {
System.out.println(e.getMessage());
}
}
}
この例ではCustomExceptionという例外クラスを自分で定義しています。
このクラスはExceptionクラスを継承しています。
なので自作したCustomExceptionクラスは、Exceptionクラスの全ての性質を持っていることになります。
(Exceptionクラスから派生している他の例外と同様に扱うことができる)
Mainクラス内のmain()メソッドで、try catch文を記述しています。
tryブロックではthrow new CustomException()として先ほど自分で定義した例外を発生させています。
catchブロックではこの例外をキャッチしてメッセージを出力しています。
このように自分で例外を定義することで、任意のタイミングで例外を発生させることが可能です。
まとめ
この記事ではJavaにおける例外とその処理の基本について解説しました。
カスタム例外などJavaで本格的なプログラムを書いていく際によく使う内容もあります。
しっかり覚えて自分で使えるようにしておくと役に立つと思います!
当サイトでは他にもJavaに関する記事があるのでそちらも見て頂けると嬉しいです!
コメント