0

私はJavaの初心者です。エラーが発生した場合はご容赦ください。提案を歓迎します。私が行ったエラーについて喜んで耳を傾けます。私の質問を読んで返信してくれてありがとう。

私はいくつかの本から以下のコードを取得します

コードでは新しい例外がスローされますが、それでもコードはコンパイルされ、それに類似したコードがもう 1 つ貼り付けられますが、別の動作を理解できませんでした

最初のコードは X を出力しますが、私によると、オーバーライドされたメソッドfoo()は新しい例外をスローすべきではありません。次に、メソッドの呼び出し中footry-節があるcatch場合は使用する必要があります。throws

class X { public void foo() { System.out.print("X "); } }    

public class SubB extends X {

    public void foo() throws RuntimeException {
        super.foo();
        if (true) throw new RuntimeException();
        System.out.print("B ");
    }

    public static void main(String[] args) {
        new SubB().foo();
    }
}

2 番目のコードは上記と似ていますが、メソッドの呼び出し中にtry-を使用する必要があります。catch

class A {
    void foo() throws Exception { throw new Exception(); }
}

class SubB2 extends A {
    void foo() { System.out.println("B "); }
}

class Tester {
    public static void main(String[] args) {
        A a = new SubB2();
        a.foo();
    }
}

この例外は親クラスのfooメソッドで拡張されますが、上記のコードでは例外はサブクラスのfooメソッドにあります。

4

2 に答える 2

1

overriden methodsRuntimeExceptions(unchecked exceptions)あなたが投げなくても投げることができますsuperclass method。でも同じnot trueですchecked exceptions(like IOExceptions....)

あなたの場合:

RunTimeExceptionオーバーライドされたメソッドでa をスローするため、最初のコードはコンパイルされます。

以下のコードはコンパイルされません。

public class subClass extends SuperClass {
     public void overridenMethodFromSuper() throws IOException {


     }

 } 

コンパイラ エラーが発生します。Exception IOException is not compatible with throws clause in SuperClass.overridenMethodFromSuper()

于 2012-10-27T10:44:18.543 に答える
1

最初のコードでは、RuntimeException をスローするように宣言していますが、これはUnchecked Exception処理する必要がありません。したがって、この理由から、親クラスのメソッドになくても、オーバーライドされたメソッドの throws 句に追加することもできます。

ただし、2 番目のコードでは、Exception 階層にあり、Compiler による throwExceptionを宣言しており、スローする場合は、親クラスのメソッド throws 句で宣言する必要があります。また、メソッドを呼び出すときに、それも処理する必要があります。top levelChecked

基本クラスのオーバーライドメソッドで制限を増やすことはできませんが、ある意味でChecked Exceptionオーバーライドメソッドにエクストラを追加することはできませんが、UncheckedException を追加すれば許可されます。

詳細については、次のリンクを参照してくださいException Handling。 -

于 2012-10-27T10:45:00.070 に答える