如果我们不编写try catch块或者尝试finally块或者将Exception传递给它调用函数以检查异常,那么Java会产生编译时错误。但是,我的问题是为什么然后catch块是可选的即我们可以写try块然后最终阻止所以,这不是一件肮脏的事情。如果我错了,请纠正我..
答案 0 :(得分:2)
finally
阻止,因为即使抛出异常,也可能会运行一些代码。即使抛出异常,您也可能希望关闭某些数据库连接或资源。答案 1 :(得分:2)
如果您尝试使用块中的方法抛出未经检查的异常,则可以省略catch
块。
未经检查的异常在Java中有特殊处理:
throws
它; catch
它(也不是throws
它,见上文。)明确定义了Java中所谓的“未经检查的异常”。所有例外最终都是Throwable
,未经检查的例外情况要么继承Error
或RuntimeException
。
答案 2 :(得分:1)
Try-finally通常用于处理关键代码以执行。像释放资源或锁定对象一样。这里的意图不是处理异常,而是确保即使发生了一些意外的异常资源安全释放。这是确保 finally块在所有场景中执行。唯一的例外是JVM不应该关闭。
答案 3 :(得分:0)
嗯,这不是一个非常干净/好的编码方式,但是你告诉编译器你知道可能出错了。这并不意味着它是良好的做法,但最终它是你的代码。编译器错误地“尝试”的原因是你以某种方式监督它。这对于未经检查的异常特别有用。在Oracle http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html
上阅读更多相关信息答案 4 :(得分:0)
如果在方法的签名中声明异常(已选中或未选中),则不必强制为try块设置catch子句。如果是未经检查的异常,您甚至不需要声明它。
尽管如此,您经常需要释放或释放资源,无论是否发生异常都是独立的。所以你可以这样写:
public void someMethod() throws IOException {
Object resource = getSomeResource();
try {
// Imagine, all following calls could throw an IOException
workWithResource(resource);
continueWorkWithResource(resource);
stillDoSomeWorkOnResource(resource);
} finally {
releaseResource(resource);
}
}
即使其中一个方法抛出IOException,资源也会在将异常传播给方法的调用者之前释放。如果没有例外,资源也会被释放。
始终执行finally块。