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