2

我正在为这个星期五的 CS 考试而学习,并且在这里遇到了一个障碍。该问题要求我处理异常,然后使用两种不同的方法传播异常,但我的印象是它们是同一回事。任何人都可以帮忙吗?下面列出了练习题。

您将获得以下课程:

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() 方法中的编译错误。使用两种不同的技术重写 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 回答