MENU

【Java Silver 試験】例外処理と例外をスローするメソッド【例外スロー】

Java Silver試験に向けた例外処理の練習問題を解いていきましょう。

問題

次のプログラムを実行した場合、コンパイルエラーが発生します。その理由として正しい選択肢を選んでください。

class Calculator {
                void divide(int a, int b) throws ArithmeticException {
                    if (b == 0) {
                        throw new ArithmeticException("Division by zero");
                    } else {
                        System.out.println("Result: " + (a / b));
                    }
                }
            }

            public class Main {
                public static void main(String[] args) {
                    Calculator calc = new Calculator();
                    try {
                        calc.divide(10, 0);
                    } catch (Exception e) {
                        System.out.println("Exception caught");
                    }
                }
            }

選択肢

  • A. 例外がスローされても、例外がキャッチされるためコンパイルエラーは発生しない
  • B. throwsキーワードをつけているため、例外処理が不適切である
  • C. throwsキーワードがあるメソッドは、必ず例外をスローしないといけない
  • D. Try-catchブロックが正しく例外を処理しているため、エラーは発生しない

答えと解説

回答を見る

答え

A. 例外がスローされても、例外がキャッチされるためコンパイルエラーは発生しない

解説

解説のポイント:

  • 例外のスローとキャッチ
  • checked例外とunchecked例外

基本説明:

このプログラムで使われている例外は、ArithmeticExceptionです。

この例外は実行時に発生するunchecked例外に属します。

Javaではunchecked例外については、明示的なcatchやthrows宣言が必要ありません。

誤答理由:

B:throwsを使うことが問題とはならないため、例外のスローだけでコンパイルエラーにはつながりません。

C:メソッド内で例外が実際に発生しなくても問題ありません。

つまずきポイント:

初学者がよく勘違いするのはthrowsがついている=例外を必ず発生させるという点です。

実際には、throwsはそのメソッドが例外をスローする可能性があることを示す記述です。

発展知識:

例外の種類にはcheckedとuncheckedがあり、正しい扱い方を理解することが重要です。

checked例外を扱う際には適切にthrows宣言するかtry-catchブロックで処理を行わせる必要があるため注意しましょう。

目次