019 例外と例外処理(基本的な例外処理) 001 解答例

import java.util.Scanner;

public class DivisionProgram {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        try {
            System.out.print("最初の整数を入力してください: ");
            int num1 = scanner.nextInt();

            System.out.print("次の整数を入力してください: ");
            int num2 = scanner.nextInt();

            int result = num1 / num2;
            System.out.println("結果: " + result);

        } catch (ArithmeticException e) {
            System.out.println("ゼロで割ることはできません。再度入力してください。");

        } finally {
            scanner.close();
        }
    }
}

この解答例では、ユーザーに2つの整数を入力させ、除算結果を計算して表示しています。ただし、ユーザーが0を入力した場合には ArithmeticException が発生し、「ゼロで割ることはできません。再度入力してください。」と表示されます。最後には、使用した Scannerfinally ブロック内でクローズしています。

基本的な例外処理

. 例外処理の基本構造

Javaの例外処理は、try, catch, finally ブロックを使用して構築されます。

  • try ブロック: このブロック内には、例外が発生する可能性のあるコードを配置します。例外が発生すると、その時点で実行は try ブロックから catch ブロックに移ります。
  • catch ブロック: このブロック内には、特定の例外が発生した場合の処理が記述されます。例外が発生した場合、該当する catch ブロックが実行されます。
  • finally ブロック: このブロック内には、必ず実行される処理が配置されます。たとえ例外が発生した場合でも、finally ブロックは実行されます。主に、リソースの解放やクリーンアップなどに使用されます。

2. 例外クラス

Javaでは、様々な例外クラスが組み込まれています。主要な例外クラスには以下があります。

  • ArithmeticException: 数学的なエラーが発生した場合にスローされる例外クラス。
  • NumberFormatException: 文字列を数値に変換しようとしたときに、適切な形式でない場合にスローされる例外クラス。
  • ArrayIndexOutOfBoundsException: 配列の範囲外のインデックスを使用したときにスローされる例外クラス。

3. 複数の例外の処理

1つの try ブロックに対して複数の異なる例外クラスに対する catch ブロックを配置できます。これにより、異なる種類の例外に対して個別の処理を行うことが可能です。

try {
    // 例外が発生する可能性のあるコード
} catch (ArithmeticException e) {
    // ArithmeticExceptionに対する処理
} catch (NumberFormatException e) {
    // NumberFormatExceptionに対する処理
} catch (Exception e) {
    // その他の例外に対する処理
}

### 4. 例外の伝播と再スロー

メソッド内で例外が発生すると、その例外は呼び出し元に伝播します。また、メソッド内でキャッチした例外を再びスローすることもできます。これにより、適切なレベルで例外を処理できます。

```java
void exampleMethod() throws CustomException {
    try {
        // 例外が発生する可能性のあるコード
    } catch (SomeException e) {
        // 例外を処理した後、再び例外をスロー
        throw new CustomException("Something went wrong.", e);
    }
}

5. リソース管理とクローズ可能なリソース

AutoCloseable インターフェースを実装したクラスは、try-with-resources 文を使用してリソースの管理を行うことができます。この機能を利用すると、明示的にリソースをクローズするコードを書く必要がありません。

try (SomeResource resource = new SomeResource()) {
    // リソースを使用するコード
} catch (Exception e) {
    // 例外処理
}

これにより、リソースのクローズ漏れを防ぎ、コードを簡潔に保つことができます。

「019 例外と例外処理」問題集リスト