gpt4 book ai didi

java - 如何使用 throws 处理运行时错误

转载 作者:行者123 更新时间:2023-12-04 15:49:34 25 4
gpt4 key购买 nike

在以下代码片段中,存在进程无法处理NullPointerExceptionIllegalStateException 的情况。即在我有输入值 val=-4val=-2 的情况下。

我读到在方法签名后添加 throws 会有所帮助。但是如果我传递上述值,代码仍然会中止。

public class Test extends Throwable{
public static void processA(int val ) throws NullPointerException, IllegalStateException{
try{
System.out.println("1");
processB(val);
}catch(ArithmeticException e){
System.out.println("2");
}
System.out.println("3");
}
public static void processB(int val) throws NullPointerException, IllegalStateException{
try{
System.out.println("4");
processC(val);
}catch(NullPointerException e){
System.out.println("5");
processC(val+4);
}finally{
System.out.println("6");
}
System.out.println("7");
}
public static void processC(int val)throws NullPointerException, IllegalStateException, ArithmeticException{
System.out.println("8");
if(val<1) throw new NullPointerException();
if(val==1) throw new ArithmeticException();
if(val>1) throw new IllegalStateException();
System.out.println("9");
}

public static void main(String[] args) throws Exception {
processA(1); //processA(-2) or processA(-4)
}

}

最佳答案

它中断是因为当 NullPointerExceptionIllegalStateException 被抛出到 processA(...) 时您没有处理场景。您只处理 ArithmeticException

将以下代码添加到您的代码中,因此,如果抛出这三个异常中的任何一个,它将由方法 processA 处理。

public static void processA(int val) throws NullPointerException, IllegalStateException {
try {
System.out.println("1");
processB(val);
} catch (ArithmeticException e) {
System.out.println("11");
} catch (NullPointerException e) {
System.out.println("12");
} catch (IllegalStateException e) {
System.out.println("13");
}
System.out.println("3");
}

如果您希望调用者处理它们,那么您需要从调用者 方法中执行相同的操作。例如:

public static void main(String[] args) {
try {
processA(12);
} catch (ArithmeticException | NullPointerException | IllegalStateException e) {
// do something here
}
}

在评论中回答您的问题:“但我为什么要使用它?”

这将表明调用者需要处理该方法抛出的异常。现在调用者可以通过 try-catch block 处理它,或者它可以将异常重新抛给它的调用者。编译器还会给您一个错误,指出应该处理异常,但这只会发生在checked 异常上。您抛出的是未经检查的异常。这意味着在您的情况下,您几乎可以从方法声明中忽略它们。

关于java - 如何使用 throws 处理运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54444806/

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