当我们有一个没有任何代码的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块”
答案 0 :(得分:3)
使用catch
语句而不声明finally
声明是合法的。
14.20.2。执行try-finally和try-catch-finally
首先执行带有finally块的try语句 试块。然后有一个选择:
如果try块的执行正常完成,那么finally 块被执行,然后有一个选择:
如果finally块正常完成,那么try语句 正常完成。
如果finally块因为S而突然完成,则尝试 陈述突然完成,原因是S。
你说:
我们既没有捕获异常,也没有最终清理代码 块。 如果是这样的话,为什么JAVA没有考虑编译时间 检查一下?
您在finally
声明中所写的内容当然是由开发人员掌握的
使用空if
语句是没用的,但是使用空for
或div {
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-catch
或try-finally
语句中包含了抛出异常的代码,因此编译器知道您处理了潜在的错误。你用它做什么取决于你,它被授权忽略它。
你可以争辩说:“与完全不同的是,这有什么不同?”。不同之处在于,如果您没有将它放在try
子句中,编译器就无法知道您是故意这样做了还是忘了它。
基本上,捕获异常是必需的,但处理它不是。