[英]Try…finally…without catch generating an exception
这是一个非常愚蠢的问题,但我想知道一些事情。 我有一个变量,我必须填写一个Integer
。 在某些情况下,我从中获取数据的源可能返回空字符串或只是离线。 我不必处理离线情况,因为如果它离线的源,程序永远不会到这么远。 所以我想做这样的事情:
int i = 0;
try {
i = mySource.getInt();
}
finally {
System.out.println(i);
}
int i = 0
是我的基值,所以如果我必须解析空字符串,我将只使用初始值。 在这种情况下,我们将生成一个异常,它不会被捕获。 有没有办法在不处理异常的情况下做这样的事情(所以不使用catch(Exception e){}
)或者它只是不好的做法?
只是为了澄清:我现在不需要检查源是否在线,因为它是一个已解析的xml文件,因此我在下载文件时会检查它是否处于脱机状态。
如果您没有捕获它,则会传播该异常。 既然你知道是什么导致了异常,你就不希望控制流被中断,而你只想要默认值,传播异常没有任何好处。 抓住它然后吃它,然后使用默认值。
使用try ... finally
没有捕获的时间是你需要清理的东西(通常需要关闭的资源),但你不想处理任何可能被抛出的异常,你想让他们走了。 这是相反的情况,你没有任何需要关闭的东西,你只想压制异常并使用默认值。
如果你控制getInt()
,让它抛出未经检查的异常并删除throws
子句。 几年前检查过的例外失败了。
满足以下条件时,检查异常是合理的:
否则,未经检查的异常更合适(正如@Stefan Kendall所建议的那样 )。
不确定我是否关注过你,但最后用于确保在引发异常时执行代码块。 如果没有捕获,我没有看到终点的意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.