如果我这样做:
String str = null;
str.toLowerCase();
这里我将有一个NullPointerException,我想知道将在何处创建一个异常。 JVM是否管理此类情况并抛出NullPointerException,或者在编译时在com.sun.tools.javac.code.Type类中对该情况进行一些检查?
我找不到一篇好的文章,它会向我解释,我也找不到任何与OpenJDK javac源代码中的Runtime异常相关的内容。任何人都可以基于解释或链接到book \ article我可以阅读有关运行时异常创建的内容吗?
答案 0 :(得分:1)
回答这部分我想知道将在何处创建例外?或标题本身抛出NullPointerException在哪里?
它是在相同的调用Stack 上创建的,它是有序列表 已调用的方法获取错误的方法 发生,然后搜索包含块的方法 可以处理异常的代码(即异常处理程序)。
图像来源Oracle。
回答你的这一部分
或在编译时对这种情况进行一些检查?
因为A 必须在代码中的某处捕获已检查的异常。。如果没有代码将无法编译。这就是他们被称为检查异常的原因。没有
由于
String str = null;
str.toLowerCase();
您将能够在不处理任何异常的情况下进行编译,因此不是已检查的异常 (您可以在网上寻找更好的正式定义。)
现在你知道NullPointerException不是一个经过检查的例外。
引用JSL
未经检查的异常类(第11.1.1节)免于编译时检查。即所有运行时 例外
当方法检测到这些RuntimeException时会抛出这些RuntimeException,因为它在虚拟机中遇到错误runtime