你是否会不捕获异常或抛出不会被捕获的异常?

3

我曾经遇到过这样的情况,我会抛出/重新抛出一个异常,因为我知道周围的代码会捕获特定的异常。但是有没有任何时候你想要抛出一个异常,明知道它不会被捕获?

或者至少,不捕获异常?

异常会立即停止应用程序,除非它们被正确处理?所以我想知道,你是否想故意让你的应用程序死掉?


请参见https://dev59.com/m3RB5IYBdhLWcg3wl4Oc - Brian
14个回答

0

这取决于你所说的“被捕获”的含义。无论是底层操作系统还是其他东西,最终都会捕获异常。

我们有一个工作流系统,执行由单个作业组成的作业计划。每个作业运行一段代码。对于某些异常情况,我们不想在代码中处理它们,而是将其抛出到堆栈上,以便外部工作流系统捕获它(这完全发生在抛出者的进程之外)。


0

如果你正在编写整个应用程序,那么你的原因是你自己的。我可以想到一些情况下你可能想要抛出异常并让应用程序崩溃,但大多数情况下这些都不是很好的理由。

最好的理由通常是调试时。我经常在调试时禁用异常,以便更好地知道哪里出了问题。如果你在带有调试器的机器上运行它,也可以打开抛出异常中断。

另一个可能的原因是,在抛出异常后继续执行没有意义,或者可能导致不可恢复的数据损坏或更糟糕的情况(想象一下带激光束的机器人,但是你应该非常确定你的应用程序处理这些情况,崩溃程序只是懒惰的方式)。

如果你正在编写API代码或框架代码,而你自己不会使用它们,那么你不知道是否有人会捕获你的异常。


0

是的,这是我唯一的机会之一,可以抨击那些在使用服务/对象上出了差错的开发人员,让他们知道"你做错了!"

同时,还可以消除您不想允许或似乎“不可能”的可能性。捕获所有异常并继续运行的应用程序只是一个被混乱包围的有围墙花园。


0

如果我需要一个中等规模的系统,以我相信是一致的方式处理数据。

并且

在某个时候,我发现应用程序的状态变得不一致。

并且

系统还不知道如何修复不一致,并从容地恢复

那么,是的,我会抛出一个异常,并尽可能详细地说明,尽快使应用程序崩溃,以避免对数据造成进一步的伤害。如果可以恢复,重要的是不要试图费力地掩盖问题,以免加剧问题。

稍后,在更好地了解导致不一致的事件链之后,高级设施可以捕获该异常,修复状态,并在最小干扰下继续进行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接