gpt4 book ai didi

java - 我什么时候应该重新抛出异常?

转载 作者:行者123 更新时间:2023-12-01 14:47:26 24 4
gpt4 key购买 nike

我有以下代码:

 method1() throws Exception{
//throws an Exception
}

method2() throws Exception{
method1();
//do something
}

method3() throws Exception{
method2();
//do something
}

method4() throws Exception{
try{
method3();
//do something
}catch(Exception e){
//catch exception
}
}

如果 method1() 中发生异常,它会冒泡到 method4() 并在那里被捕获。

但是,我在一些与此类似的问题的答案中发现,其中异常是通过以下方式抛出的:

 method1() throws Exception{
//throws an Exception
}

method2() throws Exception{
try{
method1();
}catch(Exception e){
throw e;
}
}

重新抛出异常的最佳方法是什么?为什么它更好?

在我阅读的有关“异常处理”最佳实践的文章中,他们说要早抛出并晚捕获。这是否意味着我们必须从内部方法中尽可能多地重新抛出异常?

如果我的 method1() 抛出 SQLException,我应该仅在 method4() 中捕获它还是在 method1() 本身中处理它?<​​/p>

更新:假设,如果 method1() 中发生异常,我想在 UI 中显示一些消息。那么解决办法是什么呢?我应该将其冒泡还是返回一个指示问题的值?

method4() 将向 UI 显示一些消息。

最佳答案

仅用 throw e; 抛出异常对我来说似乎不合理。如果您已经声明了一个自己的异常类,该异常类封装了一组几个基本异常,请使用throw。或者使用它,如果您的程序检测到无效(业务)数据,则本身不会导致异常。

此外,我会尝试减少方法中 throw 声明的数量。最好让代码对任何类型的异常都更加健壮,而不是拥有大量异常和 try catch block 。一直显式地冒泡异常(使用 throw)会使程序变得更长且可读性较差。

只要有可能,就尝试处理异常;例如如果用户尝试打开一个不存在的文件,则显示警告并返回一个值,该值表明父进程出现故障。

尽早抛出意味着:您的方法应该尽早验证输入数据,如果某些内容不符合指定,则抛出运行时异常。 迟到至少意味着:避免捕获异常,如果你对此无能为力。让它们冒泡并记录它们或通知用户(取决于系统)

也检查ExceptionRuntimeException之间的区别。 p>

关于java - 我什么时候应该重新抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15282237/

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