1

ここでは、例外の処理を要求していない他の場所からこのメソッドを呼び出すときに、メソッド シグネチャでスローを使用しました。

 public class Exception {

        int a, b, c;

        void set(String data[]) throws NumberFormatException, ArrayIndexOutOfBoundsException {
            a = Integer.parseInt(data[0]);//convert the string into int. eg1.("12" ---> 12)  eg2.("df23" ---> fail)
            b = Integer.parseInt(data[1]);
            c = 0;
        }

        void divide() throws ArithmeticException {
            c = a / b;
        }

        void disp() {
            System.out.println(a + " / " + b + " = " + c);
        }
    }
4

2 に答える 2

3

例外を処理するように求めていない他の場所からこのメソッドを呼び出す場合。

はい、どちらもRuntimeExceptionであり、キャッチしてはならないためです。

例外と未チェックの例外に関する Java チュートリアルを読んでください。

RuntimeExceptionメソッドのように、 sを宣言するメソッドが表示されることがあります。これは、キャッチしなくてもスローされる可能性のある例外を文書化する方法です。

user3168013 さんのコメントに加えて

チェックされていない例外をチェックされた例外に変換するにはどうすればよいですか。

すべての例外には原因があります。原因は、それにつながる別の例外です。原因がない場合は、ルート例外です。したがって、チェックされた例外のインスタンスを作成し、原因としてチェックされていない例外を渡し、チェックされた期待値をスローすることができます。

たとえば、チェック済み例外を定義します

public class DataFormatException extends Exception {
    public DataFormatException(Throwable cause) {
        super(cause);
    }
}

そして自分で投げる

void set(String data[]) throws DataFormatException {
    try {
        a = Integer.parseInt(data[0]);// convert the string into int.
                                        // eg1.("12"
                                        // ---> 12) eg2.("df23" ---> fail)
        b = Integer.parseInt(data[1]);
        c = 0;
    } catch (NumberFormatException e) {
        throw new DataFormatException(e);
    } catch (ArrayIndexOutOfBoundsException e) {
        throw new DataFormatException(e);
    }
}

もちろん、原因に応じて詳細な例外メッセージを表示した方がよいでしょうが、これはほんの一例です。

于 2014-01-08T08:55:51.747 に答える