1

如果我们不编写 try catch 块或 try finally 块或将异常传递给它正在调用检查异常的函数,Java 会给出编译时错误。这很好。但是,我的问题是为什么那么 catch 块是可选的,即我们可以写尝试块然后最终阻止所以,这不是一件肮脏的事情。如果我在某处错了,请纠正我。

4

5 回答 5

2
  • 调用方法也可以处理异常
  • finally允许阻止,因为即使抛出异常,也可能存在一些应该运行的代码。即使抛出异常,您也可能希望关闭某些数据库连接或资源。
于 2013-08-08T11:59:25.323 回答
2

catch如果您尝试块中的方法抛出未经检查的异常,您可以省略一个块。

未经检查的异常在 Java 中有特殊处理:

  • 如果你抛出一个,你不必声明你的方法throws它;
  • 如果您调用一个抛出一个的方法,无论它是在 try 块中还是其他地方,您都不会被迫使用catch它(也不会强迫throws它,见上文)。

Java中所谓的“未经检查的异常”是明确定义的。所有异常最终都是Throwables,未经检查的异常要么继承Error要么RuntimeException

于 2013-08-08T12:00:52.990 回答
1

Try-finally 通常用于处理要执行的关键代码。诸如释放资源或锁定对象之类的事情。这里的目的不是处理异常,而是确保即使发生一些意外异常,资源也被安全释放。这是确保的,因为finally 块在所有场景中都被执行。唯一的例外是 JVM 不应该关闭。

于 2013-08-08T12:01:37.173 回答
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 块总是被执行。

于 2013-08-08T12:27:16.140 回答
0

好吧,这不是一种真正干净/不错的编码方式,但是您是在告诉编译器您知道可能会出错。这并不意味着它是好的做法,但最终它是你的代码。编译器让您对“尝试”产生错误的原因是您是否以某种方式监督了它。这对于未经检查的异常是特殊的。在 Oracle http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html阅读有关它的更多信息

于 2013-08-08T12:01:32.147 回答