当前位置: 首页 > 面试题库 >

如果捕获空指针异常不是一个好习惯,那么捕获异常是一个好习惯吗?

吕利
2023-03-14
问题内容

我听说捕捞NullPointerException是一种不好的做法,我认为这样做是明智的。让NullPointerException传播到顶部将允许检测出问题。但是很多时候我已经看到很多朋友Exception直接被捕获,因此他们不必理会上面代码中可能发生的所有不同种类的异常。这是一个好习惯吗?还有哪些其他最好不处理的例外情况?此外,对我来说,处理NullPointerException一个确定了异常源的特定代码对我来说也很有意义。那么什么时候处理异常,什么时候不应该处理?最好不处理的异常清单可能是什么?


问题答案:

宠物小精灵异常处理不好。特别是,如果这是一个空块,而您只是在吞下它们。您使用了特殊类型的异常,原因是它们实际上是在特定上下文中表示特定事物(实际上,它们是在告诉您出了什么问题)。因此,通过捕获Exception您是在说您不在乎那些异常是什么,并且您不在乎发生了什么。这可能不是您想要的。

通常,捕获异常时请遵循以下规则:

  • 在此级别处理异常是否有意义?如果是,则进行处理。如果不是,则传播。
  • 结合第一条规则,“处理”还可以表示捕捉,包裹和重新投掷。这是防止抽象泄漏的一种方法,这样您的方法的调用者不必知道底层实现。
  • 空的catch块并不意味着您已经处理了异常。这就是所谓的“吞咽”;至少,您要记录该异常。有时,发生异常实际上是代码逻辑流程的一部分,因此您可能需要做一些特殊的事情(但这是对双关语,而不是规则,请原谅。最好检查导致异常的情况而不是将它们合并到代码的逻辑流程中)。

您可以轻松地在代码中检查null值,因此无需显式捕获null指针异常。放任不管是没有道理的NullPointerException(这是不好的做法)。即使您有一些代码引发NullPointerException,并且您无法控制并且无法修复该代码,您也应该确定导致的输入参数NullPointerException并专门对其进行测试。

您不应该捕获的另一个例外是IllegalArgumentException。此异常意味着您传入了没有意义的参数。代替捕获此异常,您应该显式测试输入参数,以确保它们是理智的并且不会引起IllegalArgumentException



 类似资料:
  • 问题内容: 为什么捕获使用不被视为良好的编程习惯?什么是处理RuntimeException的正确方法? 另外,为什么不赶上?如何执行此行为? 问题答案: 通常,a 表示编程错误(在这种情况下,您无法“处理”该错误,因为如果您知道期望发生错误,则可以避免该错误)。 捕获任何这些常规异常(包括)都是一个坏主意,因为这意味着您声称自己了解所有可能出错的情况,尽管如此,您仍然可以继续。有时(而不是通常)

  • 问题内容: 捕捉是不好的做法Throwable吗? 例如这样的事情: 这是不好的做法还是我们应该尽可能具体? 问题答案: 您需要尽可能具体。否则,这种不可预见的错误可能会逐渐消失。 此外,Throwable掩护Error也是如此,通常这是没有回报的。您不想捕获/处理该问题,而是希望您的程序立即死亡,以便可以正确修复它。

  • 问题内容: 最近,我的一位同事编写了一些代码,以捕获整个方法周围的空指针异常,并返回单个结果。我指出了空指针可能有多种原因,因此我们将其更改为对一个结果的防御性检查。 但是,捕获NullPointerException对我来说似乎是错误的。在我看来,空指针异常是错误代码的结果,而不是系统中预期的异常。 在任何情况下捕获空指针异常都有意义吗? 问题答案: 是的,捕获任何东西几乎总是一种代码气味。该C

  • 问题内容: 该方案。我在写与游戏相关的代码。在该游戏中,(同时也是一个类)具有的列表。有迹象表明,从继承其他类型的项目,例如,或。 显然,拥有我很方便。但是,当我获得玩家物品时,我唯一可以区分哪种物品的方法就是使用关键字。我确信我已经读过,依赖它是不好的做法。 在这种情况下可以使用吗?还是我应该重新考虑我的所有结构? 问题答案: 假设我正在写一些库存代码: 这样可以编译并正常工作。但是它错过了面向

  • 问题内容: 我正在开发一个相对较大的Python应用程序,因此我希望保留几种资源,因为可以在多个不同模块中访问全局变量。这些值包括版本号,版本日期,全局配置以及一些指向资源的静态路径。我还包括了一个由命令行选项设置的标志,以便我可以在调试模式下运行应用程序而无需整个环境。 我一直在谨慎地确保要导入的值在程序运行过程中不会发生变化,并且我已将它们记录为不应被触及的全局常量变量。我的代码本质上看起来像

  • 问题内容: 将Assert用于函数参数以增强其有效性是否是一个好习惯。我浏览了Spring Framework的源代码,发现它们使用了很多代码。这是一个例子 这是另一个: 仅供参考,(不是语句)在util类中定义如下: 问题答案: 原则上,断言与许多其他运行时检查没有什么不同。 例如,Java在运行时对所有数组访问进行绑定检查。这会使事情变慢吗?是。有好处吗?绝对!一旦发生越界违规,就会引发异常,