NullPointerException在哪里被抛出?

时间:2015-06-09 13:57:44

标签: java nullpointerexception runtimeexception

如果我这样做:

String str = null;
str.toLowerCase();

这里我将有一个NullPointerException,我想知道将在何处创建一个异常。 JVM是否管理此类情况并抛出NullPointerException,或者在编译时在com.sun.tools.javac.code.Type类中对该情况进行一些检查?

我找不到一篇好的文章,它会向我解释,我也找不到任何与OpenJDK javac源代码中的Runtime异常相关的内容。任何人都可以基于解释或链接到book \ article我可以阅读有关运行时异常创建的内容吗?

1 个答案:

答案 0 :(得分:1)

回答这部分我想知道将在何处创建例外?或标题本身抛出NullPointerException在哪里?

  

它是在相同的调用Stack 上创建的,它是有序列表   已调用的方法获取错误的方法   发生,然后搜索包含块的方法   可以处理异常的代码(即异常处理程序)。

Searching the call stack for the exception handler. 图像来源Oracle。

回答你的这一部分

或在编译时对这种情况进行一些检查?

  

没有

因为A 必须在代码中的某处捕获已检查的异常。。如果没有代码将无法编译。这就是他们被称为检查异常的原因。

由于

String str = null;
str.toLowerCase();

您将能够在不处理任何异常的情况下进行编译,因此不是已检查的异常 (您可以在网上寻找更好的正式定义。)

现在你知道NullPointerException不是一个经过检查的例外。

引用JSL

  

未经检查的异常类(第11.1.1节)免于编译时检查。即所有运行时   例外

当方法检测到这些RuntimeException时会抛出这些RuntimeException,因为它在虚拟机中遇到错误runtime