プログラミング/例外処理
表示
< プログラミング
例外処理の基本概念
[編集]例外とは何か
[編集]例外(エクセプション)とは、プログラムの実行中に発生する予期せぬ異常や、通常の処理の流れを中断させる事象のことを指します。これは、ファイルの読み書きエラー、ネットワーク接続の問題、不正な入力値の処理など、さまざまな状況で発生します。
例外処理の重要性
[編集]例外処理は、以下の理由から非常に重要です:
- プログラムの安定性を確保する
- エラー発生時の適切な対応を可能にする
- システムの堅牢性を向上させる
- ユーザーに有益なエラー情報を提供する
基本的な例外処理の構文
[編集]try-catch-finally ブロック
[編集]基本的な例外処理の構文は以下のように構成されます:
try { // 例外が発生する可能性のあるコード } catch (特定の例外クラス 例外変数) { // 例外発生時の処理 } finally { // 例外の有無に関わらず常に実行されるコード }
例外のキャッチと処理
[編集]例外は、発生する可能性のあるコードを try ブロックで囲み、対応する catch ブロックで処理します。finally ブロックは、例外の有無に関わらず必ず実行されます。
主な例外の種類
[編集]例外の分類
[編集]例外は大きく2つに分類されます:
- チェック例外(Checked Exception): コンパイル時にチェックされる例外
- 非チェック例外(Unchecked Exception): 実行時にのみ発生する例外
代表的な例外
[編集]- IOException: ファイルや入出力に関連する例外
- NullPointerException: null参照に対する操作
- ArrayIndexOutOfBoundsException: 配列の範囲外アクセス
- ArithmeticException: 算術的な例外(ゼロ除算など)
例外のスロー
[編集]throw キーワード
[編集]throw キーワードを使用して、明示的に例外をスローできます:
if (age < 0) { throw new IllegalArgumentException("年齢は負の値にできません"); }
独自の例外クラス作成
[編集]独自の例外クラスを作成することで、より具体的で意味のある例外処理が可能になります:
public class CustomValidationException extends Exception { public CustomValidationException(String message) { super(message); } }
例外処理のベストプラクティス
[編集]適切な例外処理
[編集]- 具体的な例外をキャッチする
- 必要以上に広範囲な例外のキャッチを避ける
- 意味のあるエラーメッセージを提供する
例外のログ記録
[編集]例外は、デバッグと追跡のためにログに記録することが重要です:
try { // 処理 } catch (SomeException e) { logger.error("エラーが発生しました", e); }
リソース管理と自動クローズ
[編集]try-with-resources
[編集]リソースの自動クローズを行う try-with-resources 構文:
try (FileReader reader = new FileReader("example.txt")) { // ファイル処理 } catch (IOException e) { // エラー処理 } // リソースは自動的にクローズされる
演習問題
[編集]基本的な例外処理の実装
[編集]ユーザー入力の年齢に対して、不正な値(負の数)が入力された場合の例外処理を実装しなさい。
カスタム例外の作成
[編集]銀行口座の残高管理において、残高不足時にスローされるカスタム例外クラスを作成しなさい。
リソース管理
[編集]ファイルの読み書きを行うメソッドを作成し、適切な例外処理とリソース管理を実装しなさい。
まとめ
[編集]例外処理は、堅牢で信頼性の高いプログラムを作成するための重要な概念です。適切な例外処理により、プログラムの安定性と保守性を大幅に向上させることができます。