ExceptionHandling恶作剧

时间:2013-08-08 11:56:32

标签: java exception-handling

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

5 个答案:

答案 0 :(得分:2)

  • 调用方法也可以处理异常
  • 允许
  • finally阻止,因为即使抛出异常,也可能会运行一些代码。即使抛出异常,您也可能希望关闭某些数据库连接或资源。

答案 1 :(得分:2)

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

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

  • 如果你扔掉一个,你就不会被迫宣布你的方法throws它;
  • 如果你调用抛出一个的方法,无论是在try块还是其他方面,你都不会被迫catch它(也不是throws它,见上文。)

明确定义了Java中所谓的“未经检查的异常”。所有例外最终都是Throwable,未经检查的例外情况要么继承ErrorRuntimeException

答案 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块。

相关问题