Java 抛出新的NullPointerException VS调用null对象上的方法

Java 抛出新的NullPointerException VS调用null对象上的方法,java,nullpointerexception,Java,Nullpointerexception,我想测试我的应用程序并检查它是否正确处理NullPointerException 我有两个办法: throw new NullPointerException(); 以及: 它们都产生相同的堆栈跟踪 第二个对我来说是“更真实的”,因为这是我真实代码中会发生的事情 这两种说法有什么不同吗? 我应该使用哪一种?使用 throw new NullPointerException(); 因为您想测试您的应用程序是否正确地定义了NullPointerException。使用 throw new Nul

我想测试我的应用程序并检查它是否正确处理NullPointerException

我有两个办法:

throw new NullPointerException();
以及:

它们都产生相同的堆栈跟踪

第二个对我来说是“更真实的”,因为这是我真实代码中会发生的事情

这两种说法有什么不同吗? 我应该使用哪一种?

使用

throw new NullPointerException();
因为您想测试您的应用程序是否正确地定义了
NullPointerException

使用

throw new NullPointerException();
因为您想测试应用程序是否正确地定义了
NullPointerException

直接使用

throw new NullPointerException();
因为,JRE在

  • 调用空对象的实例方法。

  • 访问或修改空对象的字段

  • 将null的长度视为数组

  • 像数组一样访问或修改null的插槽

  • 将null作为可丢弃的值抛出

当你这么做的时候

((Object) null).hashCode();
您满足了第一个条件,JRE抛出了
NPE。

最后,您又增加了一步。就这样。没有区别。

直接使用

throw new NullPointerException();
因为,JRE在

  • 调用空对象的实例方法。

  • 访问或修改空对象的字段

  • 将null的长度视为数组

  • 像数组一样访问或修改null的插槽

  • 将null作为可丢弃的值抛出

当你这么做的时候

((Object) null).hashCode();
您满足了第一个条件,JRE抛出了
NPE。


最后,您又增加了一步。就这样。没有区别。

如文档所述,两行代码都会引发相同的异常。除非您想测试JRE/Java(这是完全不必要的),否则就测试策略而言,这两行代码之间没有区别

如文档所述,两行代码都会引发相同的异常。除非您想测试JRE/Java(这是完全不必要的),否则就测试策略而言,这两行代码之间没有区别

没有区别,但是stacktrace的外观应该略有不同。没有stacktrace的外观是相同的<代码>抛出空值也会起作用(我想因为它是NPE'ing中的一个),但我会使用显式版本,因为它清楚地表达了你的意图,你以后不会问自己你在那里做了什么。没有区别,stacktrace的外观应该稍有不同。没有stacktrace的外观是相同的<代码>抛出空值顺便说一句也可以(我想是因为它是NPE'ing中的一个),但我会使用显式版本,因为它清楚地表达了你的意图,你以后不会问自己你在那里做了什么。这是真的!但我真正想测试的是,当对空对象调用方法时会发生什么,如果我的应用程序处理得很好,就会发生什么。JRE将抛出一个新的NullPointerException。@PhilippSander是的,我理解你的意思。但是当对空对象调用方法时,jvm只抛出一个NullPointerException。因此,我不认为产生NullPointerException并让jvm抛出它,然后自己在测试中抛出它有什么好处。这个答案非常好,但我选择sureshs是因为有详细的解释。这是真的!但我真正想测试的是,当对空对象调用方法时会发生什么,如果我的应用程序处理得很好,就会发生什么。JRE将抛出一个新的NullPointerException。@PhilippSander是的,我理解你的意思。但是当对空对象调用方法时,jvm只抛出一个NullPointerException。因此,我看不到导致NullPointerException的好处,让jvm抛出它,然后自己在测试中抛出它。这个答案非常好,但我选择sureshs是因为有详细的解释。