gpt4 book ai didi

java - 异常处理Java

转载 作者:搜寻专家 更新时间:2023-11-01 01:00:29 25 4
gpt4 key购买 nike

class chain_exceptions{
public static void main(String args[]){
try
{
f1();
}
catch(IndexOutOfBoundsException e)
{
System.out.println("A");
throw new NullPointerException(); //Line 0
}
catch(NullPointerException e) //Line 1
{
System.out.println("B");
return;
}
catch (Exception e)
{
System.out.println("C");
}
finally
{
System.out.println("D");
}
System.out.println("E");
}

static void f1(){
System.out.println("Start...");
throw new IndexOutOfBoundsException( "parameter" );
}
}

我希望第 1 行能够捕获从第 0 行抛出的 NullPointerException,但它并没有发生。

但为什么会这样呢?

当定义了另一个 catch block 时,为什么 Line1 的 NPE 处理程序不能捕获它?

是不是因为“throw”直接进入了main()方法?

最佳答案

捕捉{ . . . block 与 try{ 相关联。 . . } block 。 catch block 只能捕获从 try block 抛出的异常。第一个 catch block 之后的其他 catch block 与 try block 无关,因此当您抛出异常时,它们不会被捕获。或者 main() 没有捕获异常。

每个 catch block 的一种类型将执行您正在尝试执行的操作。

try{
try
{
f1();
}
catch(IndexOutOfBoundsException e)
{
System.out.println("A");
throw new NullPointerException(); //Line 0
}
}
catch(NullPointerException e) //Line 1
{
System.out.println("B");
return;
}

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

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