gpt4 book ai didi

java - 抛出所有捕获的异常的目的是什么?

转载 作者:行者123 更新时间:2023-11-29 07:24:15 25 4
gpt4 key购买 nike

我正在检查我们的核心程序代码以进行重构,我遇到了这个奇怪的 try/catch block

try {
//Do some socket and network stuff
} catch (NoRouteToHostException e) {
throw e;
} catch (UnknownHostException e) {

throw e;
} catch (IOException e) {

throw e;
} finally {
//Does some counting stuff over here
}

我到现在都想不明白,到底为什么会有人做这样的事情,写这段代码的人都离开了公司,但确实很牛逼。

这个 try/catch block 有什么用途吗?抛出这些异常并从调用方法的地方做最后的事情不是更好吗?

最佳答案

如果在重新抛出异常之前几乎什么都不做,那么捕获它就没有意义了。删除该特定异常的 catch block 。

try 不需要任何 catch block ,前提是有 finally

请注意,catch (SomeException e) {} 正在做一些有异常的事情:它正在吞下它(这可能无论如何都是不可取的)。因此,您不能在不更改语义的情况下删除它。

唯一的异常(exception)(没有双关语意)是如果你不想捕获一个以其他方式捕获的异常的特定子类。例如:

try {
} catch (FileNotFoundException e) {
throw e;
} catch (IOException e) {
// Do something.
}

如果您要删除 FileNotFoundException 的捕获/重新抛出,它会改变语义,因为它将由更通用的 IOException 处理。如所写,FNFE 将“跳过”IOE 的 catch block 。

(这只是偶尔有用)。

关于java - 抛出所有捕获的异常的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57457795/

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