如果最后跟着try块,如何处理异常

时间:2010-10-30 09:44:47

标签: java

如果我最终只使用了catch块,将如何处理异常

3 个答案:

答案 0 :(得分:3)

异常将在调用堆栈中向上传递,就像你的try块不存在一样,除了finally中的代码将被执行。

一些示例代码

try {

   // an exception may be thrown somewhere in here

}
finally {
   // I will be executed, regardless of an exception thrown or not
}

答案 1 :(得分:2)

您的异常不会被捕获,但最终会调用并执行'finally'块。您可以编写如下快速方法并查看它:


public void testFinally(){
        try{
            throw new RuntimeException();

        }finally{
            System.out.println("Finally called!!");
        }
    }

答案 2 :(得分:2)

  

如果我最终只使用了catch块,将如何处理异常

在这种情况下,不会捕获或处理异常。会发生什么,取决于finally子句中发生的事情。

  • 如果finally子句中的语句序列“正常”完成,则原始异常将继续传播。
  • 如果finally子句中的语句序列由于某种原因“突然”完成,则整个try语句将终止 原因。突然终止包括抛出异常,执行returnbreakcontinue。在这种情况下,原始异常会丢失而不会被“处理”。

这有一些相当有趣的后果。例如,以下内容会压缩try块中抛出的任何异常。

public void proc () {
    try {
        // Throws some exception
    } finally {
        return;
    }
}

try条款finally语句的详细信息载于JLS 14.20.2