2

声明(未经检查的异常)沿着方法签名 b/c 抛出异常的好处是什么,它不会强制调用者保持在 try catch 块中。

public void testRuntimeEx()throws RuntimeException{

if(1==1){throw new RuntimeException()}

}

//Caller method
public void testCaller(){
// not necessery to handle even caller does not known which RuntimeException might be throws then what is the benefit throws clause with method signature
testRuntimeEx(); 

}
4

4 回答 4

3

它仍然用作文档,特别是如果您不使用通用 RuntimeException,而是使用更具体的东西,例如 IllegalArgumentException 或UnsupportedOperationExceptionIndexOutOfBoundsException,并添加一些 JavaDoc 以了解何时会发生这种情况。

不过,在您的示例代码片段中,它毫无意义。

于 2011-12-06T06:57:24.280 回答
2

此声明是向使用此代码的开发人员发出的一个信号,即它会引发 RuntimeException。但是味道不好闻。

您发布的 PS 代码将无法编译:

throw RuntimeException

这不是正确的投掷。

于 2011-12-06T06:59:42.540 回答
1

好处是通常调用者与异常没有任何关系。它捕获它,用其他异常包装并再次抛出。或者,或者,使用throws关键字声明异常,如果出现异常,则对该类型透明。

我想说,所描述的情况对于我们通常编写业务代码并拥有一个处理所有异常的集中位置的应用程序来说是典型的。对于 API,它是不正确的。例如,如果您正在使用实现 SSH 的库,您希望它在出现IOException问题时抛出(甚至更专业的异常)。

于 2011-12-06T07:01:20.643 回答
0

如果您抛出自定义的未检查异常,则它变得更有意义,而不是捕获系统异常,并且未检查的异常也不会强制捕获。

于 2011-12-06T07:55:49.750 回答