gpt4 book ai didi

java - 已检查和未检查的自定义异常

转载 作者:行者123 更新时间:2023-12-02 05:30:04 26 4
gpt4 key购买 nike

我对下面程序中 CustomExceptions 的行为感到困惑。如果 Line2 被注释而 Line1 没有注释,那么程序运行良好,但如果 Line1 被注释,而 Line2 没有被注释,则 Line3 的编译时错误将出现为“Unreachable catch block for CustomChecked.This exception is never throw from the try statements body”。请帮助我为什么这个完整的时间异常只出现在未检查的异常中?

       try
{
if(true)
{
throw new CustomChecked("Checked Exception");// Line1
// throw new CustomUnChecked("Un-Checked Exception");// Line2

}
}

catch(CustomChecked ex) //Line3
{
System.out.println(ex.getMessage());
}
catch(CustomUnChecked ex)
{
System.out.println(ex.getMessage());
}

异常(exception):

class CustomChecked extends Exception
{
public CustomChecked(String msg) {
super(msg);
}
}

class CustomUnChecked extends RuntimeException
{
public CustomUnChecked(String msg) {
super(msg);
}
}

最佳答案

CustomUnCheckedRuntimeException这是 unchecked这意味着编译器不会检查谁可以/做 throwexception 。编译器假设每个对象/方法/代码块都可以throw任何类型的RuntimeException这样您就可以随时在 check 中检查此类异常声明。

另一方面,检查了CustomChecked,这意味着编译器会检查所有可能引发该异常的方法和代码块。所以你只能catch如果您知道(在编译时)调用在 try 内抛出异常的方法/代码,则检查异常堵塞。

总而言之 - 你的编译器通知你,catch您在第 3 行中不需要(因此应该删除),因为有人不可能 throw try 语句中的 CustomCheckedException。因为 CustomUnCheckedException 不是 checked通过compiler (这是运行时,假设无论如何都会抛出意外),check声明可以保留。

关于java - 已检查和未检查的自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642100/

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