1

とてもナイーブに聞こえるかもしれませんが、ご容赦ください。しかし、単純なシナリオが理解できません。

以下はコードです

class Utils {
    int getInt(String x) throws Exception {
        return 7;
    }
}

public class Tutorial4 extends Utils  {
    public static void main(String[] args) {
        Utils u = new Tutorial4();
        u.getInt("2");

    }

    int getInt(String arg) {
        return Integer.parseInt(arg);
    }
}

しかし、次のコードはコンパイル時のエラーを示しています

u.getInt("2");

例外を宣言または処理するように求められます。

ただし、上記のメソッドをオーバーライドすると、エラーが表示される理由

次に、例外の代わりに NUllPointerException を指定すると、エラーは発生しません

その背後にあるコンセプトは何ですか?

ありがとう

4

6 に答える 6

3

例外を宣言または処理するように求められます。

そうだね。スローされる例外を宣言したメソッドを呼び出す場合、呼び出し元のメソッドは、その例外がスローされることを宣言するか、その例外を処理する必要があります。

ただし、上記のメソッドをオーバーライドすると、エラーが表示される理由

メソッドをオーバーライドしている間は、制限を削除または減らすことはできません。オーバーライド メソッドは、少なくとも、オーバーライドされたメソッドで宣言されている例外またはそのサブクラスを宣言する必要があります。

次に、例外の代わりに NUllPointerException を指定すると、エラーは発生しません

NPE はUnchecked exceptionであるため、スローされることを宣言する必要はありません。

于 2013-07-03T08:58:01.927 に答える
1

ただし、上記のメソッドをオーバーライドすると、エラーが表示される理由

これは、変数の型uUtils. そしてUtils、メソッドでChecked ExceptiongetInt()をスローしますException

宣言を次のように変更しました

Tutorial4 u = new Tutorial4();
u.getInt();

ここでは、オーバーライド中に句を定義からException削除したため、を処理する必要はありませんthrows ExceptiongetInt()

次に、例外の代わりに NUllPointerException を指定すると、エラーは発生しません

NullPointerException はUnchecked Exceptionであるためです。また、いずれかのメソッドが Unchecked 例外をスローした場合、呼び出し元は例外をキャッチする必要はありません。

于 2013-07-03T08:58:15.553 に答える
1

このリンクを見てください: http://www.artima.com/designtechniques/exceptions.html 例外概念の説明は非常に理解しやすいです。

しかし、次のコードは、It asks me to declare or handle the exception. でのコンパイル時エラーを示しています。

そのメソッドによって例外がスローされると宣言しました。オーバーライドとは、継承を意味するため、throws 宣言も継承するため、コンパイル エラーも発生します。

次に、例外の代わりに NUllPointerException を指定すると、エラーは発生しません

これは、NullPointerException が RuntimeException であり、コンパイル中にエラーとしてマークされないためです。上記のリンクにある小さな継承図を参照してください。

于 2013-07-03T09:05:41.500 に答える
0
public static void main(String[] args)  throws Exception{
        Utils u = new Tutorial4();
        u.getInt("2");

    }
于 2013-07-03T08:57:52.560 に答える