4

我有一个方法可以调用另一种方法,如下所示:

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带有检查异常的声明。对未经检查的人这样做很常见吗?

4

2 回答 2

7

可以这样做——我相信它会出现在 Javadoc 中。但它不会强制任何调用者处理异常,因此您基本上仍然依赖用户(调用您的代码的开发人员)足够勤奋地检查文档。如果这对您来说已经足够了,那就去吧 - 否则,请改为MyException检查异常。

至于声明可能抛出的未经检查的异常是否很常见——我想说我已经经常看到它了,不会特别令人惊讶,但这并不是一种广泛使用的做法。

于 2016-05-29T07:24:22.850 回答
3

您可以在子句中声明未经检查的异常throws,但是,正如您所指出的,它不会有任何实际影响,除了表示该方法可能会抛出它。这样做肯定并不少见,JDK 似乎采用了这种方法(参见,例如,参考资料Integer#parseInt)。

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

于 2016-05-29T07:25:17.763 回答