Android 即使捕获到异常,Lint也会警告可能的异常

Android 即使捕获到异常,Lint也会警告可能的异常,android,android-studio,Android,Android Studio,我有一个try块和一个catch块,其中捕获NullPointerException。但是,Lint警告说,try块中的语句可能会导致NullPointerException,即使异常将被捕获。为什么林特没有意识到我已经处理了异常的可能性 我正在使用Android Studio 3。谢谢。linter的工作是警告您可能存在问题的代码。其中一个内置规则检查可能导致NullPointerExceptions的取消引用;然后它不会检查是否捕获了此异常 但是,我想知道为什么您要捕获(NullPointe

我有一个try块和一个catch块,其中捕获NullPointerException。但是,Lint警告说,try块中的语句可能会导致NullPointerException,即使异常将被捕获。为什么林特没有意识到我已经处理了异常的可能性


我正在使用Android Studio 3。谢谢。

linter的工作是警告您可能存在问题的代码。其中一个内置规则检查可能导致
NullPointerException
s的取消引用;然后它不会检查是否捕获了此异常


但是,我想知道为什么您要捕获(NullPointerException e),而不是简单地检查
null
值,然后主动处理它们。

linter的工作是警告您可能存在问题的代码。其中一个内置规则检查可能导致
NullPointerException
s的取消引用;然后它不会检查是否捕获了此异常

但是,我想知道为什么要捕获(NullPointerException e),而不是简单地检查
null
值,然后主动处理它们。

如前所述

程序不能捕获java.lang.NullPointerException。运行时引发的NullPointerException异常表示存在必须在应用程序代码中修复的底层null指针解引用。由于以下几个原因,通过捕获NullPointerException而不是修复底层问题来处理底层空指针解引用是不合适的首先,捕获NullPointerException比简单地添加必要的空检查增加了显著更多的性能开销[Bloch 2008]。其次,当一个try块中的多个表达式能够引发NullPointerException时,很难或不可能确定哪个表达式负责该异常,因为NullPointerException捕获块处理从try块中的任何位置引发的任何NullPointerException。第三,在抛出NullPointerException后,程序很少会保持预期的可用状态。在首次捕获并记录(或更糟的是,抑制)异常后尝试继续执行很少成功

同样,程序不能捕获RuntimeException、Exception或Throwable。很少有方法(如果有的话)能够处理所有可能的运行时异常。当一个方法捕获RuntimeException时,它可能会接收到设计器未预料到的异常,包括NullPointerException和ArrayIndexOutOfBoundsException。许多catch子句只是记录或忽略附带的异常情况,并试图恢复正常执行;这种做法通常违反ERR00-J。不要抑制或忽略已检查的异常。运行时异常通常表示程序中应该由开发人员修复的错误,并且通常会导致控制流漏洞

所以,当AndroidStudio“忽略”NullPointerException捕获块时,这看起来像是故意的行为,您不应该捕获NullPointerException,而应该只检查null

另见问题。

如文所述

程序不能捕获java.lang.NullPointerException。运行时引发的NullPointerException异常表示存在必须在应用程序代码中修复的底层null指针解引用。由于以下几个原因,通过捕获NullPointerException而不是修复底层问题来处理底层空指针解引用是不合适的首先,捕获NullPointerException比简单地添加必要的空检查增加了显著更多的性能开销[Bloch 2008]。其次,当一个try块中的多个表达式能够引发NullPointerException时,很难或不可能确定哪个表达式负责该异常,因为NullPointerException捕获块处理从try块中的任何位置引发的任何NullPointerException。第三,在抛出NullPointerException后,程序很少会保持预期的可用状态。在首次捕获并记录(或更糟的是,抑制)异常后尝试继续执行很少成功

同样,程序不能捕获RuntimeException、Exception或Throwable。很少有方法(如果有的话)能够处理所有可能的运行时异常。当一个方法捕获RuntimeException时,它可能会接收到设计器未预料到的异常,包括NullPointerException和ArrayIndexOutOfBoundsException。许多catch子句只是记录或忽略附带的异常情况,并试图恢复正常执行;这种做法通常违反ERR00-J。不要抑制或忽略已检查的异常。运行时异常通常表示程序中应该由开发人员修复的错误,并且通常会导致控制流漏洞

所以,当AndroidStudio“忽略”NullPointerException捕获块时,这看起来像是故意的行为,您不应该捕获NullPointerException,而应该只检查null


另请参见问题。

在未来,这就是我将要做的。在未来,这就是我将要做的。