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年10月26日Pythonのimport完全ガイド!パッケージとモジュールの階層構造をスッキリ理解しよう
山崎講師2025年10月26日Python関数の引数の罠!正しい順番をマスターしてエラーを回避しよう
山崎講師2025年10月26日Pythonの「浅いコピー」と「深いコピー」の違いとは?コピーの罠を徹底解説!
山崎講師2025年10月26日VSCodeを自分好みに育てる!新人エンジニアのためのsettings.json徹底ガイド