2011-12-01 94 views
9

是否有可能抛出一个异常而没有捕获它?java抛出异常而没有捕获它?

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

现在我想调用foo,但不希望捕捉任何错误,因为异常应该从来没有在运行时抛出(除非有一个bug)

+0

有没有什么理由不想抓到它?如果是性能,就我所知,通过try-catch块没有太大的区别,除非实际抛出异常,否则会有很多开销。但是如果错误是灾难性的 –

+0

否,因为错误不会发生(即编程错误或runtimeexceptions)。 – Pwnna

+0

哎呦,在完成之前发布上面的内容。那么错误永远不会'假设'发生!但这听起来像是你为了它而抛出了错误。我认为您需要重新考虑是否要将错误放在第一位 –

回答

28

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

+2

谢谢!这对编写非乐观代码很有帮助,我可以有一个应该永远不会发生的异常,但会让另一个开发人员知道他们忘记了代码中的某些内容。 –

1

你可以避免捕捉异常,但是如果抛出异常并且不捕捉异常,程序将停止执行(崩溃)。

有没有办法忽略一个例外。如果你的应用程序不需要做任何事情来响应给定的异常,那么你只需要抓住它,然后什么也不做。

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

注意:这通常被认为是不好的风格,然而,人们可能会告诉你。经常被引用的原因是,即使你不打算对异常做任何事情,在大多数情况下,你至少应该在某个地方记录它,通知用户,或采取其他适当的行动,具体取决于你的应用程序这是什么原因造成了这个例外。如果你不确定为什么抛出一个异常(也许这是一个你还没有解决的bug),那么通常你至少应该记录它,以便以后找出它。

+0

我发现我需要的是RuntimeException,因为错误永远不会发生(除非有错误,否则绝不会抛出异常在代码中),我完全忘记了 – Pwnna

0

如果SomeException是检查异常,调用foo()将不得不捕获了异常,并处理它,或者也可以声明为抛出SomeException或它的父方法。

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

1

为什么你不在方法中捕捉它?

只要使用try catch块并继续,如果异常是微不足道的,并且不影响程序的任何行为。

+0

是的,完全忘记了RuntimeException。 (在python模式下) – Pwnna