gpt4 book ai didi

java - 尝试在 Java 中处理两次异常

转载 作者:行者123 更新时间:2023-12-01 17:46:52 25 4
gpt4 key购买 nike

我尝试处理异常两次

第一个是已定义方法的核心:

Class Class1 {
public int method (int a, String b) {
try {
System.out.println(a+" "+b.length());
}
catch (NullPointerException e) {
// TODO: handle exception
System.out.println("catch from the method");
}
finally {
System.out.println("finally from the method");
}
return 0;
}
}

第二个

是当我在 main 中调用此方法并向其传递 null 参数时:

public Class Class2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Class1 c = null;
try {
c = new Class1();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
c.method(1, null);
}
catch (Exception e) {
// TODO: handle exception
System.out.println("catch from the main");
}
finally {
System.out.println("finally from the main");
}
System.out.println("\nEnd of the main");
}
}

结果是:

catch from the method

finally from the method

finally from the main

End of the main

现在我的问题是,为什么 main 中的 catch block 没有执行?

最佳答案

一旦捕获异常,它就不会再继续下去,但您可以再次抛出它。如果您希望 main 也看到异常,则需要在捕获异常后再次抛出异常。试试这个:

 public int method (int a, String b) throws NullPointerException{
try {
System.out.println(a+" "+b.length());
}
catch (NullPointerException e) {
// TODO: handle exception
System.out.println("catch from the method");
throw e;
}
finally {
System.out.println("finally from the method");
}
return 0;
}

注意,由于现在函数中有一个 throw,因此您需要将其包含在函数定义中

编辑:正如一些人所说,NullPointerException实际上并不需要被捕获,因为它是一个未经检查的异常。这是因为它是 RuntimeException 的子类。

关于java - 尝试在 Java 中处理两次异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54204874/

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