繁体   English   中英

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

[英]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子句。 几年前检查过的例外失败了。

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

  1. 正确使用API​​无法阻止异常情况
  2. 一旦遇到异常,使用API​​的程序员可以采取一些有用的操作

否则,未经检查的异常更合适(正如@Stefan Kendall所建议的那样 )。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM