是否有可能跳过finally块并继续其余代码

时间:2018-09-29 11:13:41

标签: java

我尝试使用System.exit(0),但是既不执行finally块也不执行休息代码。

还尝试了return,它将执行finally块,但不会执行其余代码

private static void testMethod() {
    try {
        System.out.println("try Block");
        // Skip Finally Block.
        //return; 
        // System.exit(0);
    } catch (Exception e) {
        System.out.println("catch Block");
    } finally {
        System.out.println("Finally Block");
    }
    System.out.println("After Finally Block.");
}

输出应为

try Block
After Finally Block.

OR

try Block
catch Block
After Finally Block.

1 个答案:

答案 0 :(得分:5)

您无法阻止finally块中的代码运行;这就是finally块的作用。

可以设置一个标志并将其在if块中的代码周围的finally中使用:

private static void testMethod() {
    boolean skip = false;
    try {
        System.out.println("try Block");
        // Point A
        skip = true;
        // Point B
    } catch (Exception e) {
        System.out.println("catch Block");
    } finally {
        if (!skip) {
            System.out.println("Finally Block");
        }
    }
    System.out.println("After Finally Block.");
}

如果代码在上方的A点抛出,您将看到“最终阻止”。如果代码在上面的B点抛出,则不会。

这通常是反模式。通常有可能以更好的方式解决实际情况。