这是一个非常愚蠢的问题,但我想知道一些事情。我有一个变量,我必须填写Integer
。在某些情况下,我从中获取数据的源可能返回空字符串或只是离线。
我不必处理离线情况,因为如果它离线的源,程序永远不会到这么远。所以我想做这样的事情:
int i = 0;
try {
i = mySource.getInt();
}
finally {
System.out.println(i);
}
int i = 0
是我的基值,所以如果我必须解析空字符串,我将只使用初始值。在这种情况下,我们将生成一个异常,它不会被捕获。有没有办法在不处理异常的情况下做这样的事情(所以不使用catch(Exception e){}
)或者这只是不好的做法?
只是为了澄清:我现在不需要检查源是否在线,因为它是一个已解析的xml文件,所以当我下载文件时,我会检查它是否处于脱机状态。
答案 0 :(得分:10)
如果你没有抓住它,那么异常就会传播。既然你知道是什么导致了异常,你就不希望控制流被中断,而你只想要默认值,传播异常没有任何好处。抓住它然后吃它,然后使用默认值。
使用try ... finally
没有捕获的时间是当你有需要清理的东西时(通常需要关闭的资源),但是你不想处理任何可能被抛出的异常,你想让他们走吧。这是相反的情况,你没有任何需要关闭的东西,你只想压制异常并使用默认值。
答案 1 :(得分:4)
如果你控制getInt()
,则让它抛出未经检查的异常并删除throws
子句。几年前检查过的例外情况就失去了战争。
答案 2 :(得分:2)
满足以下条件时,检查异常是合理的:
否则,未经检查的异常更合适(如@Stefan Kendall所示)。
答案 3 :(得分:0)
不确定我是否关注过您,但最终用于确保在引发异常时执行代码块。如果不存在捕获,我没有看到终点的意义。