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
が発生し、「ゼロで割ることはできません。再度入力してください。」と表示されます。最後には、使用した Scanner
を finally
ブロック内でクローズしています。
基本的な例外処理
. 例外処理の基本構造
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) {
// 例外処理
}
これにより、リソースのクローズ漏れを防ぎ、コードを簡潔に保つことができます。