2

私は今週の金曜日に CS 試験の勉強をしていますが、ここで問題が発生しました。質問では、例外を処理してから、2 つの異なる方法を使用して例外を伝播するように求められますが、それらは同じものであるという印象を受けました。誰でも助けることができますか?以下に練習問題を掲載します。

次のクラスが与えられます。

public class ReadData {
   public void getInput() {
     getString();
     getInt();
   }

   public void getString() throws StringInputException {
     throw new StringInputException();
   }

   public void getInt() throws IntInputException {
     throw new IntInputException();
   }
}

class StringInputException extends Exception {}

class IntInputException extends Exception {}

上記のコードでは、getInput() メソッドでコンパイル エラーが発生します。2 つの異なる手法を使用して getInput() メソッドを書き直します。

Method 1 - Handle the exception 

Method 2 - Propagate the exception

コードがコンパイルされるようにします。

4

4 に答える 4

5

それらは同じものではありません。伝播とは、基本的に例外を再スローすることを意味します。つまり、コードのさらに上の場所で例外を処理できるようにします。通常、これは、現在のレベルの例外について何もできない場合に実行されます。例外を処理するということは、例外をキャッチして実際に何かを実行することを意味します-ユーザーに通知し、再試行し、ログに記録します-しかし、例外がそれ以上進まないようにします。

于 2012-12-11T01:17:59.750 に答える
4
class Example {
    // a method that throws an exception
    private void doSomething() throws Exception {
        throw new Exception();
    }

    public void testHandling() {
        try {
            doSomething();
        } catch (Exception e) {
            // you caught the exception and you're handling it:
            System.out.println("A problem occurred."); // <- handling
            // if you wouldn't want to handle it, you would throw it again
        }
    }

    public void testPropagation1() throws Exception /* <- propagation */ {
        doSomething();
        // you're not catching the exception, you're ignoring it and giving it
        // further down the chain to someone else who can handle it
    }

    public void testPropagation2() throws Exception /* <- propagation */ {
        try {
            doSomething();
        } catch (Exception e) {
            throw e; // <- propagation
            // you are catching the exception, but you're not handling it,
            // you're giving it further down the chain to someone else who can
            // handle it
        }
    }
}
于 2012-12-11T01:20:06.013 に答える
2

「例外を処理する」とは、例外をキャッチし、正常に続行するために必要なことをすべて実行することを意味します。

「例外を伝播する」とは、例外をキャッチせず、発信者に処理させることを意味します。

于 2012-12-11T01:18:12.760 に答える
0

dictionary.comはこれであなたの友達です。時々私たちはその厄介な英語に対処しなければなりません。

ハンドルとは、例外を除いて何かを実行すること、プログラムを中止すること、エラーを出力すること、データをいじることを意味します...

伝播するということは、それを別の場所に転送すること、つまり再スローすることを意味します。

于 2012-12-11T01:18:32.260 に答える