【问题标题】:Where does NullPointerException is thrown?NullPointerException 在哪里抛出?
【发布时间】:2015-06-09 13:57:43
【问题描述】:

如果我正在做这样的事情:

String str = null;
str.toLowerCase();

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

我找不到可以向我解释的好文章,我也找不到任何与 OpenJDK javac 源中抛出的运行时异常相关的内容。任何人都可以根据解释或链接到我可以阅读有关运行时异常创建的书籍\文章吗?

【问题讨论】:

  • 顾名思义,RuntimeExceptions 和NullPointerException 一样是在运行时抛出的。
  • @Dragondraikk:我会接受这个答案;但我可以积极地将其标记为评论:)
  • @MarcusMüllerꕺꕺ 老实说,我觉得提交作为答案有点太简单了。如果对 OP 有帮助,我很高兴。
  • 我知道它会在运行时抛出,但是谁负责呢?虚拟机?
  • @AlexandrRadchykov:还有谁?

标签: java nullpointerexception runtimeexception


【解决方案1】:

回答这部分我想知道哪里会创建异常?或 Title 本身 NullPointerException 是在哪里抛出的?

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

图片来源甲骨文。

回答你的这部分

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

没有

因为 A 已检查的异常。 必须在代码中的某个位置捕获。如果不是代码将无法编译。这就是为什么它们被称为检查异常。

自从

String str = null;
str.toLowerCase();

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

现在你知道 NullPointerException 不是检查异常。

引用JSL

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 2016-03-10
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    相关资源
    最近更新 更多