是否有可能抛出一个异常而没有捕获它?java抛出异常而没有捕获它?
例
public void foo() throws SomeException{
// ....
if (somethingCatestrophic) throw new SomeException();
// ....
}
现在我想调用foo,但不希望捕捉任何错误,因为异常应该从来没有在运行时抛出(除非有一个bug)
是否有可能抛出一个异常而没有捕获它?java抛出异常而没有捕获它?
例
public void foo() throws SomeException{
// ....
if (somethingCatestrophic) throw new SomeException();
// ....
}
现在我想调用foo,但不希望捕捉任何错误,因为异常应该从来没有在运行时抛出(除非有一个bug)
除非您正在计划并从本地恢复,否则在此情况下最好使用未检查的异常,例如RuntimeException
衍生产品。
谢谢!这对编写非乐观代码很有帮助,我可以有一个应该永远不会发生的异常,但会让另一个开发人员知道他们忘记了代码中的某些内容。 –
你可以避免捕捉异常,但是如果抛出异常并且不捕捉异常,程序将停止执行(崩溃)。
有没有办法忽略一个例外。如果你的应用程序不需要做任何事情来响应给定的异常,那么你只需要抓住它,然后什么也不做。
try {
...some code that throws an exception...
} catch (SomeException ex) {
// do nothing
}
注意:这通常被认为是不好的风格,然而,人们可能会告诉你。经常被引用的原因是,即使你不打算对异常做任何事情,在大多数情况下,你至少应该在某个地方记录它,通知用户,或采取其他适当的行动,具体取决于你的应用程序这是什么原因造成了这个例外。如果你不确定为什么抛出一个异常(也许这是一个你还没有解决的bug),那么通常你至少应该记录它,以便以后找出它。
我发现我需要的是RuntimeException,因为错误永远不会发生(除非有错误,否则绝不会抛出异常在代码中),我完全忘记了 – Pwnna
如果SomeException
是检查异常,调用foo()
将不得不捕获了异常,并处理它,或者也可以声明为抛出SomeException
或它的父方法。
如果SomeException
是运行时异常,那么调用它的方法将不需要捕获它。
为什么你不在方法中捕捉它?
只要使用try catch块并继续,如果异常是微不足道的,并且不影响程序的任何行为。
是的,完全忘记了RuntimeException。 (在python模式下) – Pwnna
有没有什么理由不想抓到它?如果是性能,就我所知,通过try-catch块没有太大的区别,除非实际抛出异常,否则会有很多开销。但是如果错误是灾难性的 –
否,因为错误不会发生(即编程错误或runtimeexceptions)。 – Pwnna
哎呦,在完成之前发布上面的内容。那么错误永远不会'假设'发生!但这听起来像是你为了它而抛出了错误。我认为您需要重新考虑是否要将错误放在第一位 –