尝试......最后......没有捕获生成异常

时间:2011-10-04 19:23:00

标签: java exception exception-handling

这是一个非常愚蠢的问题,但我想知道一些事情。我有一个变量,我必须填写Integer。在某些情况下,我从中获取数据的源可能返回空字符串或只是离线。 我不必处理离线情况,因为如果它离线的源,程序永远不会到这么远。所以我想做这样的事情:

    int i = 0;
    try {
        i = mySource.getInt();
    }
    finally {
        System.out.println(i);
    }

int i = 0是我的基值,所以如果我必须解析空字符串,我将只使用初始值。在这种情况下,我们将生成一个异常,它不会被捕获。有没有办法在不处理异常的情况下做这样的事情(所以不使用catch(Exception e){})或者这只是不好的做法?

只是为了澄清:我现在不需要检查源是否在线,因为它是一个已解析的xml文件,所以当我下载文件时,我会检查它是否处于脱机状态。

4 个答案:

答案 0 :(得分:10)

如果你没有抓住它,那么异常就会传播。既然你知道是什么导致了异常,你就不希望控制流被中断,而你只想要默认值,传播异常没有任何好处。抓住它然后吃它,然后使用默认值。

使用try ... finally没有捕获的时间是当你有需要清理的东西时(通常需要关闭的资源),但是你不想处理任何可能被抛出的异常,你想让他们走吧。这是相反的情况,你没有任何需要关闭的东西,你只想压制异常并使用默认值。

答案 1 :(得分:4)

如果你控制getInt(),则让它抛出未经检查的异常并删除throws子句。几年前检查过的例外情况就失去了战争。

答案 2 :(得分:2)

满足以下条件时,检查异常是合理的:

  1. 通过正确使用API​​
  2. 无法阻止异常情况
  3. 使用API​​的程序员在遇到异常时可以采取一些有用的操作
  4. 否则,未经检查的异常更合适(如@Stefan Kendall所示)。

答案 3 :(得分:0)

不确定我是否关注过您,但最终用于确保在引发异常时执行代码块。如果不存在捕获,我没有看到终点的意义。