是否有可能在不捕获异常的情况下引发异常?
示例
public void foo() throws SomeException{
// ....
if (somethingCatestrophic) throw new SomeException();
// ....
}
现在,我想调用foo,但是不想捕获任何错误,因为永远不要在运行时抛出异常(除非有错误)
除非您正在计划并从本地恢复,否则在这种情况下,最好使用未经检查的异常,例如RuntimeException
派生。
为什么不在方法内部捕获它?
如果异常无关紧要并且不影响程序的任何行为,请仅使用try catch块并继续进行。
您可以避免捕获异常,但是如果抛出异常并且您没有捕获异常,则程序将停止执行(崩溃)。
没有办法忽略异常。如果您的应用不需要对给定的异常做出任何反应,那么您只需捕获它,然后什么也不做。
try {
...some code that throws an exception...
} catch (SomeException ex) {
// do nothing
}
注意:但是,这通常被认为是不良样式,人们可能会告诉您。经常被引用的原因是,即使您除了不做任何事情,在大多数情况下,您都应至少将其记录在某处,通知用户或根据您的应用程序采取其他适当措施首先,是什么导致异常。如果您不确定为什么会引发异常(也许这是您尚未解决的错误),那么通常您至少应记录下来,以便以后查明。
如果SomeException
是一个已检查的异常,则调用foo()
的方法要么必须捕获该异常并对其进行处理,要么必须声明为抛出SomeException
或其父级。
如果SomeException
是运行时异常,则调用它的方法将不需要捕获它。
有一个技巧,您可以使用泛型。
/**
* A java syntax glitch to throw any throwable without the need to catch it.
*
* @param throwable to be ignite
* @param <T> the type of the throwable to trick the compiler that it's the one thrown
* @throws T exactly the given throwable
*/
public static <T extends Throwable> void ignite(Throwable throwable) throws T {
Objects.requireNonNull(throwable, "throwable");
throw (T) throwable;
}