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

sas*_*har 15 java exception-handling exception nullpointerexception

我听说捕捉NullPointerException是一种不好的做法,我认为这是明智的.让NullPointerException传播到顶部将允许检测出错的东西.但很多时候我看到很多朋友都Exception直接捕捉到他们不必担心上面代码中可能出现的所有不同类型的异常.这是一个好习惯吗?什么是最好的未处理的其他类型的例外?除此之外,我还可以处理NullPointerException特定代码,我们确定异常的来源.那么何时处理异常以及什么时候不应该处理它们?什么是可能的最好的例外列表,最好不做处理?

Viv*_*ath 26

口袋妖怪异常处理很糟糕.特别是,如果它是一个空块而你只是吞咽它们.你有特定类型的异常,因为它们实际上是指特定情境中的特定事物(基本上它们告诉你出了什么问题).因此,通过捕捉Exception你说你不关心那些例外是什么,你不关心发生了什么.这可能不是你想要的.

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

  • 在这个级别处理异常是否有意义?如果是,那就处理它.如果没有,那么传播.
  • 结合第一条规则,"处理"也可以意味着,捕捉,包裹和重新投掷.这是一种防止抽象泄漏的方法,因此您的方法的调用者不必了解底层实现.
  • 空catch块并不意味着您已经处理了异常.那被称为"吞咽"; 至少,您要记录异常.有时发生异常实际上是代码逻辑流程的一部分,因此您可能希望做一些特殊的事情(但是,请原谅双关语,例外而不是规则.最好检查导致异常的情况而不是将它们合并到代码的逻辑流程中).

您可以在代码中轻松检查空值,因此无需显式捕获空指针异常.让NullPointerException事情发生是没有意义的(这是不好的做法).即使您有一些代码抛出一个NullPointerException代码,而您无法控制且无法修复的代码,您应该确定导致它们NullPointerException并专门测试它们的输入参数.

你不应该抓住的另一个例外是IllegalArgumentException.这个异常意味着你传入了一个没有意义的参数.您应该明确地测试输入参数以确保它们是理智的并且不会导致输入参数,而不是捕获此异常IllegalArgumentException.

  • catch(Exception ex){当你想抓住它们的时候. (27认同)
  • 什么是"口袋妖怪异常处理"? (12认同)
  • “口袋妖怪异常处理”:Gotta Catch 'Em All :D (3认同)

Aff*_*ffe 8

捕捉NullPointerException被认为是一种不好的做法的"原因" 并不是因为当出现问题时你应该让它冒出来!说任何例外都是"最好不要处理",完全基于它的类型似乎是一个坏主意.

NPE被认为是编程错误的结果.严格正确的程序永远不应该生成一个.看到它被捕获的原因是它通常意味着代码扔了一个,程序员决定抓住它并掩盖它,而不是修复导致它的破坏代码!

例如,如果您出于业务原因将其耦合到内部存在错误的API并偶尔抛出空指针,那么抓住它,对其执行某些操作/通过更好的消息通知用户将是完全合法的.让'null'点击UI只是因为有人说"捕捉空指针异常是坏的"是没有意义的!

java.lang.Exception在特定情况下捕获可能是合法的,但通常"我很懒"不是其中之一.:)例如,如果您正在实现一个API并且想要确保没有任何异常从规范中出现,那么您可能会捕获Exception并将其包装在您定义的某个应用程序异常中.


Pet*_*rey 5

如果可以通过这样做添加一些值,则应该只捕获异常.否则你应该让它传递给调用者.

NullPointerException通常是代码中的错误的结果.怎么能明智地把它固定在一个挡块上?

没有被关于例外的困扰并不是一种好的做法.