java抛出异常而没有捕获?

问题描述 投票:13回答:5

是否有可能在不捕获异常的情况下引发异常?

示例

public void foo() throws SomeException{
    // ....
    if (somethingCatestrophic) throw new SomeException();
    // ....
}

现在,我想调用foo,但是不想捕获任何错误,因为永远不要在运行时抛出异常(除非有错误)

java exception-handling
5个回答
33
投票

除非您正在计划并从本地恢复,否则在这种情况下,最好使用未经检查的异常,例如RuntimeException派生。


1
投票

为什么不在方法内部捕获它?

如果异常无关紧要并且不影响程序的任何行为,请仅使用try catch块并继续进行。


1
投票

您可以避免捕获异常,但是如果抛出异常并且您没有捕获异常,则程序将停止执行(崩溃)。

没有办法忽略异常。如果您的应用不需要对给定的异常做出任何反应,那么您只需捕获它,然后什么也不做。

try {
  ...some code that throws an exception...
} catch (SomeException ex) {
  // do nothing
}

注意:但是,这通常被认为是不良样式,人们可能会告诉您。经常被引用的原因是,即使您除了不做任何事情,在大多数情况下,您都应至少将其记录在某处,通知用户或根据您的应用程序采取其他适当措施首先,是什么导致异常。如果您不确定为什么会引发异常(也许这是您尚未解决的错误),那么通常您至少应记录下来,以便以后查明。


0
投票

如果SomeException是一个已检查的异常,则调用foo()的方法要么必须捕获该异常并对其进行处理,要么必须声明为抛出SomeException或其父级。

如果SomeException是运行时异常,则调用它的方法将不需要捕获它。


0
投票

有一个技巧,您可以使用泛型。

/**
 * 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.