Java基礎#8 例外処理とデバッグ
〜2月17日 14:30
例外の基本(try-catch、finally)
Javaの例外処理は、プログラム実行時に発生する予期せぬエラーに対処するための重要な機能です。
主にtry-catch文とfinally句を使用して実装されます。
try-catch文の基本構造は以下の通りです:
try {
// 例外が発生する可能性のある処理
} catch (例外クラス e) {
// 例外が発生した場合の処理
}
例えば、配列の範囲外アクセスを処理する場合:
try {
int[] array = new int[3];
System.out.println(array[5]); // 範囲外アクセス
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("配列の範囲外にアクセスしました");
}
複数の例外を処理する場合は、複数のcatchブロックを使用できます。
try {
// 例外が発生する可能性のある処理
} catch (IOException e) {
// IOExceptionの処理
} catch (SQLException e) {
// SQLExceptionの処理
} catch (Exception e) {
// その他の例外の処理
}
finallyブロックは、例外の発生有無に関わらず必ず実行される処理を記述するために使用されます。
try {
// 例外が発生する可能性のある処理
} catch (Exception e) {
// 例外処理
} finally {
// 必ず実行される処理(リソースの解放など)
}
finallyは主にリソースの解放やクリーンアップ処理に使用されます。
例えば、ファイル操作の場合:
FileInputStream fis = null;
try {
fis = new FileInputStream("file.txt");
// ファイル操作
} catch (IOException e) {
System.out.println("ファイル読み込みエラー");
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
System.out.println("ファイルクローズエラー");
}
}
}
try-with-resources文を使用すると、finallyブロックを省略してリソースを自動的に解放できます。
try (FileInputStream fis = new FileInputStream("file.txt")) {
// ファイル操作
} catch (IOException e) {
System.out.println("ファイル読み込みエラー");
}
例外処理を適切に実装することで、プログラムの堅牢性と信頼性が向上します。
ただし、過度な例外処理はコードの可読性を低下させる可能性があるため、適切なバランスを保つことが重要です。
カスタム例外の作成
Javaのカスタム例外は、開発者が特定のエラー状況に対応するために作成する独自の例外クラスです。
カスタム例外を作成することで、アプリケーション固有のエラー処理をより効果的に行うことができます。
カスタム例外を作成するには、通常、Exceptionクラス(チェック例外の場合)またはRuntimeExceptionクラス(非チェック例外の場合)を継承します。
例えば:
public class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
この例では、MyCustomExceptionという名前のカスタム例外クラスを作成しています。
コンストラクタでは、superキーワードを使用して親クラスのコンストラクタを呼び出し、エラーメッセージを設定しています。
カスタム例外の使用例として、ユーザー認証システムを考えてみましょう:
public class UserNotFoundException extends Exception {
public UserNotFoundException(String username) {
super("User not found: " + username);
}
}
public class AuthenticationService {
public void authenticate(String username, String password) throws UserNotFoundException {
if (!userExists(username)) {
throw new UserNotFoundException(username);
}
// 認証ロジック
}
private boolean userExists(String username) {
// ユーザー存在確認ロジック
return false;
}
}
この例では、ユーザーが見つからない場合にUserNotFoundExceptionをスローしています。
カスタム例外を使用する利点には以下があります:
エラーの明確な分類:特定のエラー状況を明確に識別できます。
追加情報の提供:エラーに関連する追加データを含めることができます。
エラー処理の一元化:特定のエラータイプに対して一貫した処理を行えます。
カスタム例外を作成する際は、以下の点に注意してください:
適切な親クラスの選択:チェック例外かアンチェック例外かを決定します。
明確な命名:例外の目的を明確に示す名前を選びます。
必要な情報の包含:エラーの診断に役立つ情報を含めます。
カスタム例外は、コードの可読性と保守性を向上させる強力なツールですが、過度の使用は避けるべきです。
標準のJava例外クラスで十分な場合は、それらを使用することをお勧めします。
デバッグツールの使い方(EclipseやIntelliJ IDEAのデバッグ機能)
Javaのデバッグツールは、EclipseやIntelliJ IDEAなどの統合開発環境(IDE)に組み込まれており、効率的なバグ特定と修正を可能にします。
ブレークポイントの設定
デバッグの第一歩はブレークポイントの設定です。
これにより、プログラムの実行を特定の行で一時停止できます。
Eclipseでは、エディタの左端(行番号の位置)をクリックしてブレークポイントを設置します。
IntelliJ IDEAでも同様に、行番号の左側をクリックしてブレークポイントを設定できます。
デバッグモードでの実行
ブレークポイントを設定したら、デバッグモードでプログラムを実行します。
Eclipseでは、デバッグボタン(虫のアイコン)をクリックするか、`F11`キーを押します。
IntelliJ IDEAでは、デバッグアイコンをクリックするか、`Shift + F9`を押します。
ステップ実行
プログラムがブレークポイントで停止したら、以下の操作でコードを1行ずつ実行できます:
ステップオーバー:現在の行を実行し、次の行に移動(Eclipse: `F6`, IntelliJ: `F8`)
ステップイン:メソッド内部に入る(Eclipse: `F5`, IntelliJ: `F7`)
ステップアウト:現在のメソッドを抜ける(Eclipse: `F7`, IntelliJ: `Shift + F8`)
変数の監視
デバッグ中は変数の値を監視できます:
変数ビューで現在のスコープの変数値を確認
ウォッチ式を追加して特定の式の値を監視
条件付きブレークポイント
特定の条件が満たされた場合のみ停止するブレークポイントを設定できます:
ブレークポイントを右クリックし、条件を入力
スマートステップイン
IntelliJ IDEAの特徴的な機能で、複数のメソッド呼び出しがある行で使用します。
`Shift + F7`を押すと、どのメソッドにステップインするか選択できます。
例外ブレークポイント
特定の例外が発生した時点でプログラムを停止させることができます:
Eclipseでは、「実行」→「ブレークポイントの追加」→「Java例外ブレークポイント」
IntelliJ IDEAでは、「実行」→「例外ブレークポイントの表示」
評価式
デバッグ中に任意の式を評価できます:
Eclipseでは「表示」ビューを使用
IntelliJ IDEAでは`Alt + F8`を押して評価ダイアログを開く
これらのツールを適切に使用することで、Javaプログラムのバグを効率的に特定し修正できます。
デバッグスキルの向上は、開発者の生産性を大きく高める重要な要素です。
ユーザー入力を検証し、不正な入力に対して適切な例外を処理するプログラムを作成
課題
ユーザーから年齢と名前を入力として受け取り、以下の条件を満たすプログラムを作成してください:
年齢は1から120の間の整数でなければなりません。
名前は2文字以上20文字以下でなければなりません。
不正な入力に対しては、カスタム例外をスローしてください。
入力が正しい場合は、ユーザーの情報を表示してください。
すべての例外を適切に処理し、ユーザーにわかりやすいメッセージを表示してください。
回答例
ここから先は
1月18日 14:30 〜 2月17日 14:30
Amazonギフトカード5,000円分が当たる
サポートもお待ちしております! 頂いたサポートは今後の創作活動費用として、noteとYouTubeに活用させていただければと考えております!