Exceptionクラスを新人エンジニアに解説
こんにちは。ゆうせいです。
今回は、JavaのExceptionクラスについて解説します!
Exceptionクラスは、Javaでエラーや異常な状態(例外)を表現するための基本クラスです。Exceptionクラスを理解することで、例外処理や独自の例外の作成について深く学べます。
Exceptionクラスとは?
Exception
クラスは、Javaの標準ライブラリで提供される例外のスーパークラスです。
例外は、プログラムの実行中に発生する異常を表現し、try-catch
で適切に処理することが求められます。Exception
クラスを継承したクラスを使うことで、さまざまな状況に応じたエラーを扱うことができます。
Exceptionクラスの基本構造
継承関係
Exception
クラスは、以下の階層構造に属しています。
java.lang.Object
↳ java.lang.Throwable
↳ java.lang.Exception
↳ (サブクラス:IOException, SQLException など)
Throwable
: すべてのエラーや例外のスーパークラス。Exception
: チェック例外(Checked Exception)を表すクラス。RuntimeException
: 実行時例外(Unchecked Exception)のスーパークラス。
Exceptionの種類
1. チェック例外(Checked Exception)
- コンパイル時に例外処理が必要な例外。
- サブクラス例:
IOException
,SQLException
。
import java.io.File;
import java.io.FileReader;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
FileReader fr = new FileReader(new File("example.txt")); // ファイルがない場合、例外発生
} catch (Exception e) {
System.out.println("エラー: " + e.getMessage());
}
}
}
2. 実行時例外(Unchecked Exception)
- コンパイル時に例外処理が不要な例外。
- サブクラス例:
NullPointerException
,ArithmeticException
。
public class RuntimeExceptionExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); // 配列の範囲外で例外発生
}
}
3. エラー(Error)
Exception
ではなくError
クラスを継承するエラー。- 主に、プログラムで回復できない重大な問題(例: JVMのクラッシュ)。
- サブクラス例:
OutOfMemoryError
,StackOverflowError
。
Exceptionクラスの基本的な使い方
1. try-catchで例外処理
Exception
を直接使用する場合、try-catch
ブロックを使って例外を処理します。
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // 例外発生
} catch (Exception e) {
System.out.println("エラーが発生しました: " + e.getMessage());
}
}
}
2. 独自の例外を作成
Exception
クラスを継承して、独自の例外を作成できます。
例:独自例外の作成
class MyException extends Exception {
public MyException(String message) {
super(message); // 親クラスのコンストラクタを呼び出す
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
throw new MyException("これは独自の例外です");
} catch (MyException e) {
System.out.println("エラー: " + e.getMessage());
}
}
}
出力:
エラー: これは独自の例外です
3. 例外のスローとキャッチ
throw
で例外をスローし、throws
でメソッドが例外をスローする可能性を宣言します。
例:例外をスローするメソッド
public class ThrowsExample {
public static void main(String[] args) {
try {
checkAge(-1); // 年齢が不正な場合、例外が発生
} catch (Exception e) {
System.out.println("エラー: " + e.getMessage());
}
}
public static void checkAge(int age) throws Exception {
if (age < 0) {
throw new Exception("年齢は0以上でなければなりません");
}
System.out.println("年齢: " + age);
}
}
Exceptionクラスの主なメソッド
メソッド | 説明 |
---|---|
getMessage() | 例外メッセージを取得します。 |
printStackTrace() | 例外のスタックトレースを出力します。 |
toString() | 例外の文字列表現を返します。 |
getCause() | 例外の原因を取得します。 |
例:スタックトレースを表示
public class ExceptionMethodExample {
public static void main(String[] args) {
try {
int result = 10 / 0;
} catch (Exception e) {
e.printStackTrace(); // エラーの詳細を表示
}
}
}
Exceptionのメリットと注意点
メリット
- エラーの局所化:
try-catch
でエラー処理を明確に分離。 - 回復可能なエラーの処理:例外をキャッチして適切に対応。
- コードの保守性向上:独自例外でエラーを明確に分類可能。
注意点
- 乱用は避ける:不要な例外処理はコードを複雑にする。
- 正しい例外の使用:適切な例外(
IOException
やNullPointerException
など)を選ぶ。 - 例外の丸投げ:
throws
で例外を投げ続けると、呼び出し元の処理が複雑になる。
練習問題
問題:入力値のバリデーション
- ユーザーから整数値を入力させる。
- 入力値が負の数の場合、独自例外
NegativeNumberException
をスロー。 - 入力値が適切な場合は、その値を表示。
ヒント
- 独自例外を作成。
Scanner
で値を取得。
まとめと次のステップ
JavaのException
クラスは、エラーや異常を適切に処理するための基盤となるクラスです。
これを理解することで、安全で堅牢なプログラムを作成できるようになります。
次に学ぶと良いテーマ:
- RuntimeExceptionとErrorの違い:例外とエラーを区別。
- 例外チェーン:別の例外の原因として例外をラップする方法。
- ログの活用:例外を記録してトラブルシューティングに役立てる。
ぜひ、例外を活用して安全なプログラム作成に挑戦してみてください!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新入社員2025年1月8日新人エンジニアの皆さんに向けて「共有フォルダのマナー」を解説
- 新人エンジニア研修講師2025年1月7日研修講師が道徳的免罪符(moral licensing)に陥らないためにできること
- 新入社員2025年1月7日Windowsユーザーの日常生活や仕事で役立つPythonプログラム30選
- 新入社員2025年1月7日Pythonの入門研修の最後に行う演習の例