【问题标题】:Java Exception Handling ConceptJava 异常处理概念
【发布时间】:2016-04-23 21:04:18
【问题描述】:

如果我必须为调用另一个处理异常的类的类处理和测试异常,我会感到困惑。

这是我的课程的基本解释:

Class A -> 有一个方法并调用抛出异常的方法。使用 try 和 catch 处理异常

B 类 -> 调用 A 类的方法。现在它不会抛出任何异常,因为异常在 A 类中处理。

我想知道是否必须添加 throws 并显示异常是在 B 类中引发的?另外,我是否必须对 B 类中调用的方法抛出异常进行单元测试?当我尝试这样做时,测试用例失败了。

这是处理异常的 A 类:

public String getFooData(Foo foo, String foo1, String foo2) {
    String foodata = "";
    try {
        FooRequest request = foo.setFoo1(foo1).setFoo2(foo2).buildQueryMessage();
        foodata = request.getFooData();
    } catch (SystemException e) {
        errorReporter.report(".SystemException", e);
    }
}

这是我的 B 班:

public String getFoo(String foo2) {
    RequestBuilder requestBuilder = Request.Provider(ProviderType.foo);
    String foodata = instanceOfA.getFooData(foo, foo1, foo2);
    return foodata;
}

【问题讨论】:

    标签: java c# exception-handling


    【解决方案1】:

    我想知道是否必须添加 throws 并显示异常是在 B 类中引发的?

    如果你的意思是:

    public String getfoo(String foo2) throws SystemException { ... }
    

    那么答案是否定的。您不必声明该方法会抛出SystemException,因为它不会。它在Class A 中被抛出/处理,并且不会传播到Class B。但是,您是否没有处理Class A 中的异常,如果它是Checked Exception,则必须在Class A 的方法签名中指定您的异常。然后您可以选择在Class B 中处理它或进一步传播它。还需要指定Class B 抛出一个已检查的异常,或者包裹在Runtime Exception 中并在方法签名中不声明它就抛出它。

    public String getfoodata(Foo foo, String foo1, String foo2) throws SystemException { ... }
    

    另外,我是否必须对 B 类中调用的方法抛出异常进行单元测试?

    Class B 不会抛出异常。它被扔到Class A 并在那里处理。

    【讨论】:

    • @Jasmine 没问题!如果它完全回答了您的问题,请不要忘记“标记为已解决”(赞成/反对票下的绿色复选标记)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多