3

我正在学习 SCJP 6 学习指南 Exam_310-065 的第 5 章以及它说的异常声明和公共接口部分

“每个方法必须要么通过提供一个 catch 子句来处理所有已检查的异常,要么将每个未处理的已检查异常列为抛出的异常。”

我们如何将每个未处理的已检查异常列为抛出的异常以及它在代码中的样子?谢谢。

4

2 回答 2

5

它看起来像这样:

public void foo() throws SomeCheckedException, AnotherCheckedException
{
    // This method would declare it in *its* throws clause
    methodWhichThrowsSomeCheckedException();

    if (someCondition)
    {
        // This time we're throwing the exception directly
        throw new AnotherCheckedException();
    }
}

有关详细信息,请参阅JLS 中的第 8.4.6 节

于 2012-06-19T16:57:34.277 回答
2

例如,如果您有:

public void doSomething() throws SomeException { 
    ... 
    throw new SomeException();
} 

并且你想调用doSomething,你必须要么catch异常,要么声明使用它的方法也容易被 throwing SomeException,因此在调用堆栈中进一步传播它:

public void doSomethingElse() throws SomeException { 
    doSomething();
}

或者

public void doSomethingElse() { 
    try { 
        doSomething();
    }
    catch (SomeException) { 
        // Error handling
    }
}

考虑到RuntimeExceptions 不是检查异常,因此它们是该规则的一个例外。

于 2012-06-19T16:59:48.177 回答