我应该声明一个未经检查的例外吗?

时间:2016-05-29 07:20:46

标签: java exception unchecked-exception

我有一个方法可以调用另一种方法:

public void m1() {
    m2(10);
}

public void m2(int v) {
    if(v < 10)
        throw new MyException();
}

public class MyException extends RuntimeException{ }

现在,我想通知将要使用m1()的客户,它可能会抛出MyException。如果我这样宣布它是否可以:

public void m1() throws MyException{
    m2(10);
}

我不确定它,因为我曾经使用throws声明和已检查的例外。与未经检查的人一起这样做是否常见?

2 个答案:

答案 0 :(得分:7)

可以这样做 - 我相信它会出现在Javadoc中。但是它不会强迫任何调用者处理异常,所以你仍然基本上依赖于用户(开发人员调用你的代码)来努力检查文档。如果这对您来说足够了,那就去吧 - 否则,将MyException更改为已检查的例外。

至于它是否普通来声明可能被抛出的未经检查的异常 - 我会说我经常看到它并不足以让它不特别令人惊讶,但它& #39;不是一种广泛使用的做法。

答案 1 :(得分:3)

您可以在throws子句中声明一个未经检查的异常,但是,正如您所指出的,除了表示该方法可能会抛出它之外,它不会产生任何实际影响。这样做绝对不常见,JDK似乎采用了这种方法(例如,参见Integer#parseInt)。

无论你是否在throws子句中声明它,你都应该在方法的javadoc中记录它,这是使用你的方法的人可能会看到的第一个地方。