尝试使用空的finally块进行阻止

时间:2017-06-06 08:51:25

标签: java try-catch

当我们有一个没有任何代码的try块终于阻塞时,编译器编译好了。但是,这里没有尝试的目的 - 因为我们既没有捕获异常也没有清理finally块中的代码。

public int updateTable(InputVo sfVo){
    //SqlSession session = ConnFactory.getSqlSession();
    //InputMapper spMapper = session.getMapper(InputMapper .class);
    int updRecs=0;
    try {

        mapper.updateData(sfVo);    

        updRecs=sfVo.getRecsUpdated();
        return updRecs;

    } finally {
        //session.close();
    }
}

如果是这样的话,为什么JAVA没有考虑对此进行编译时检查?

如果编译器在编译时抛出错误本身就不会更好 - 比如“不能有一个空的finally块”

3 个答案:

答案 0 :(得分:3)

使用catch语句而不声明finally声明是合法的。

来自enter image description here

  

14.20.2。执行try-finally和try-catch-finally

     

首先执行带有finally块的try语句   试块。然后有一个选择:

     

如果try块的执行正常完成,那么finally   块被执行,然后有一个选择:

     

如果finally块正常完成,那么try语句   正常完成。

     

如果finally块因为S而突然完成,则尝试   陈述突然完成,原因是S。

你说:

  

我们既没有捕获异常,也没有最终清理代码   块。   如果是这样的话,为什么JAVA没有考虑编译时间   检查一下?

您在finally声明中所写的内容当然是由开发人员掌握的 使用空if语句是没用的,但是使用空fordiv { border-radius: 5px; border: 1px solid #000000; width: 100px; text-overflow: ellipsis; display: block; overflow: hidden; padding: 10px 20px; } span { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }语句也是一样的。
这些是无助的,但编译器不会抱怨它,因为它在编译方面保持有效的代码 然而,IDE可以发出关于它的警告以指出难闻的气味。

答案 1 :(得分:2)

要添加一些上下文,最后只需要使用keyword / label来标识链接到ionic serve的块语句。这就像在try中调用的goto

每个块语句都可以为空。

try

即使这是有效的

if(true){}
--
while(true){}
--
public void method(){}

所以,我们可以说编译器不关心那些内容,只关注它中的语法。

答案 2 :(得分:0)

由于您在try-catchtry-finally语句中包含了抛出异常的代码,因此编译器知道您处理了潜在的错误。你用它做什么取决于你,它被授权忽略它。

你可以争辩说:“与完全不同的是,这有什么不同?”。不同之处在于,如果您没有将它放在try子句中,编译器就无法知道您是故意这样做了还是忘了它。

基本上,捕获异常是必需的,但处理它不是。