我有一个愚蠢的怀疑。在使用throws
时,我知道我们指定了多个例外。我的查询是否可以包含Exception
(通用)以及其他特定的例外情况?这是正确的编码方法吗?
public String display() throws IOException, FileNotFoundException, Exception {
...
}
这里使用Exception
是正确的方法??
答案 0 :(得分:4)
这是合法代码。
这是一个坏主意。
这是一个坏主意的原因是调用者现在必须处理(或传播)Exception
。但是Exception
几乎可以是任何东西。如果您不知道它可能是什么,如何在异常处理程序中执行任何明智的 1 异常?
我认为,如果您不知道异常的原因是什么,那么您可以做的唯一完全安全的事情是记录并终止应用程序。在某些情况下,您可以尝试记录异常,"失败"请求并继续下一个。如果服务可用性是最高优先级,那么这可能是一种明智的策略,并且系统被设计为健壮的(例如,幂等请求,事务实现)。但是,这种方法存在增加损害的风险。但是抛出Exception
的问题在于你更难区分可恢复的错误和不可恢复的错误。
答案 1 :(得分:2)
这是合法的Java代码。
在Exception
声明中使用throws
的第一部分。
在它建议该方法可以抛出绝对任何已检查的异常之前,很少应该在生产代码中编写,这是非常罕见的。
但它目前用于Junit测试。测试功能的目的是测试一个功能,并且应该尽可能简单,因为它不会包含逻辑错误。因此,将测试编写为:
是很常见的@Test
public void testFeature() throws Exception {
//actual test that can call any function declaring checked exception
}
这只是意味着您不必担心在测试体中使用的函数中声明的可能异常。
但是除了其他异常(子)类之外,您的代码还声明了Exception 。这没用,因为所有异常类都是Exception
的子类,因此IOException
和FileNotFoundException
是 Exception
s。
所以即使合法,这也没有意义:如果你将Exception
放在throws
声明中,你应该删除所有其他异常类,因为它们已经包含在Exception
声明中
答案 2 :(得分:0)
在我看来,方法可以抛出一般的异常,当你的业务逻辑和你的管道工作就像应用程序必须继续工作,即使在致命错误后,将此错误记录为FFDC并继续工作。如果您的应用程序必须在致命错误后关闭,那么您的方法不得抛出通用异常。