プログラミング/例外処理
< プログラミング
例外処理の基本概念
編集例外とは何か
編集例外(エクセプション)とは、プログラムの実行中に発生する予期せぬ異常や、通常の処理の流れを中断させる事象のことを指します。これは、ファイルの読み書きエラー、ネットワーク接続の問題、不正な入力値の処理など、さまざまな状況で発生します。
例外処理の重要性
編集例外処理は、以下の理由から非常に重要です:
- プログラムの安定性を確保する
- エラー発生時の適切な対応を可能にする
- システムの堅牢性を向上させる
- ユーザーに有益なエラー情報を提供する
基本的な例外処理の構文
編集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) { // エラー処理 } // リソースは自動的にクローズされる
演習問題
編集基本的な例外処理の実装
編集ユーザー入力の年齢に対して、不正な値(負の数)が入力された場合の例外処理を実装しなさい。
カスタム例外の作成
編集銀行口座の残高管理において、残高不足時にスローされるカスタム例外クラスを作成しなさい。
リソース管理
編集ファイルの読み書きを行うメソッドを作成し、適切な例外処理とリソース管理を実装しなさい。
まとめ
編集例外処理は、堅牢で信頼性の高いプログラムを作成するための重要な概念です。適切な例外処理により、プログラムの安定性と保守性を大幅に向上させることができます。