我有一个调用另一个方法的方法,如下所示:
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
声明。未经检查的这样做很常见吗?
你可以这样做 - 我相信它会出现在Javadoc中。但它不会强迫任何调用者处理异常,所以你仍然基本上依赖于用户(调用你的代码的开发人员)足够勤奋地检查文档。如果这对您来说足够了,那就去做吧 - 否则,MyException
更改为已检查的异常。
至于声明可能引发的未经检查的异常是否常见 - 我会说我已经经常看到它,以至于它并不特别令人惊讶,但这不是一种广泛使用的做法。
您可以在 throws
子句中声明未经检查的异常,但正如您所指出的,除了表示该方法可能会引发它之外,它不会有任何实际影响。这样做绝对并不少见,JDK 似乎已经采用了这种方法(例如,请参阅Integer#parseInt
)。
不管你是否在throws
子句中声明它,你都应该在方法的javadoc中记录它,这是使用你的方法的人可能会看到的第一个地方。