gpt4 book ai didi

Java 抛出错误并捕获 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 10:01:20 24 4
gpt4 key购买 nike

这对我来说没有意义。

第一个例子:

示例 1(良好):

public static void main(String args[]){
try {
Exception e = null;
throw e;
} catch (Exception e) {
}

这段代码一切正常 - 异常被抛出并被捕获。

示例 2(错误):

public static void main(String args[]){
try {
Exception e = null;
throw e;
} catch (NullPointerException e) {
}
}

这不会编译,因为 catch block 无法捕获 NullPointerException,它是 Exception 的子类。它不知道会抛出什么样的异常。

java.lang.Object
java.lang.Throwable
java.lang.Exception --> Thrown
java.lang.RuntimeException
java.lang.NullPointerException --> Cannot catch like this

所以让我们将异常更改为NullPointerException:

示例 3(良好)

public static void main(String args[]) {
try {
NullPointerException e = null;
throw e;
} catch (NullPointerException e) {
}

简单而合乎逻辑,但这里出现了一些非常奇怪的事情:

示例 4(良好)- 不知道为什么?:

public static void main(String args[]) {
try {
Error e = null;
throw e;
} catch (NullPointerException e) {
}

如果我抛出一个错误,我该如何捕获NullPointerException?这个不成立。

有:

Throwable:错误、异常

ErrorException都是Throwable的子类,但是NullPointerException无关>错误,这是一个Exception,而不是Error

最佳答案

您正试图抛出一个空对象,但失败了,并导致抛出一个 NullPointerException

您应该使用 throw new Exception (); 抛出异常

只是为了澄清。如果您问为什么第二个示例无法编译,而第四个示例可以:

Error 及其子类是未经检查的异常,不必在 throws 子句中捕获或声明。

The unchecked exception classes are the run-time exception classes and the error classes.

( JLS 11.1.1. )

这就是为什么您可以抛出一个 Error 并捕获一个 Exception,并且代码会编译。

另一方面,在您的第二个示例中,您试图抛出一个检查异常 (Exception) 并捕获一个 NullPointerException,这不是父类(super class)异常。这就是为什么除非您捕获 Exception 或声明您的主方法 throws Exception,否则代码不会编译。

关于Java 抛出错误并捕获 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26584426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com