当前位置: 首页 > 面试题库 >

为什么我可以在Java中抛出null?

燕和同
2023-03-14
问题内容

运行此命令时:

public class WhatTheShoot {

    html" target="_blank">public static void main(String args[]){
        try {
            throw null;
        } catch (Exception e){
            System.out.println(e instanceof NullPointerException);
            System.out.println(e instanceof FileNotFoundException);
        }
    }
}

响应为:

true  
false

这对我来说真是太棒了。我本以为这会带来编译时错误。

为什么我可以在Java中抛出null,为什么将其转换为NullPointerException?

(实际上,鉴于我抛出的是null,因此我不知道这是否是“ upcast”)

除了一个非常愚蠢的面试问题(请没人在面试中问这个问题)之外,我看不到任何理由throw null。也许您想被解雇,但这就是…我的意思是,为什么还会有人throw null呢?

有趣的事实 IntelliJ IDEA
12告诉我,我的一行e instanceof NullPointerException永远是错误的。这根本不是真的。


问题答案:

似乎不是将null其视为a NullPointerException,而是尝试throw null 自己
抛出的行为NullPointerException

换句话说,throw检查其参数为非null,如果为null,则抛出NullPointerException

JLS 14.18
指定了以下行为:

如果对Expression的求值正常完成,并产生一个null值,则将创建并抛出NullPointerException类的实例V’而不是null。然后,throw语句突然完成,原因是值为V’的throw。



 类似资料:
  • 问题内容: 直接的答案是因为s接口被指定为不会引发异常。但是为什么呢? 或换句话说:我必须依赖可以引发异常的函数。从理论上讲,这不应该发生。但是,如果发生这种情况,我希望它脱离我正在使用的整个函数(在中)。即我希望它的行为就像发生未处理的异常一样。 似乎这不可能以一种显而易见的自然方式进行(因为如果接口说它不能抛出异常,就不会)。 我该如何解决?用丑陋的try / catch并打印出异常,并希望我

  • 问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节:

  • 我有这个Spring Data,它处理数据库上的CRUD操作。 是我数据库的User表的实体。向存储库添加以下操作: 如文档中所述,如果给定的id为null,则删除和查找操作会抛出,而保存操作不会抛出任何异常。 问题是Crudepository的javadoc没有提到这些操作引发的其他异常。例如,如果提供的ID在数据库中不存在,它不会告诉操作抛出。 在操作的javadoc中,不清楚在插入一个新用户

  • 我的代码出现错误: 我的示例的完整代码如下:

  • 我试图在Java中将扫描字符串转换为JSONObject,并从JSON Simple导入JSON模块。我已经在构建路径中添加了JSON-simple-1.1.1.jar。然而,当我试图传递内联字符串时。我的内联字符串如下:{“events”:[{“url”:“/操纵多云国家”,“visitorId”:“03c0b5e0-3eeb-382a-8c6d-35e4bb189cf6”,“timestamp

  • 当使用Mockito截尾时,我们通常为一个方法指定一个具体的参数。之后,我们可以用相同的参数调用Stubed方法。例如,在下面的代码中,get()用参数0进行了stubed。所以,当调用get()时,get()的参数也是0。因此,get()将返回一个整数,即3。 如果调用语句被修改为: 即参数更改为1,然后Mockito抛出“NullPointerException”,而不是“AssertionE