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

DKC*_*dex -3 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.");
}
Run Code Online (Sandbox Code Playgroud)

输出应该是

try Block
After Finally Block.
Run Code Online (Sandbox Code Playgroud)

要么

try Block
catch Block
After Finally Block.
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

您无法阻止finally块中的代码运行; 这就是该finally块的用途.

可以设置一个标志并iffinally块中的代码周围使用它:

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.");
}
Run Code Online (Sandbox Code Playgroud)

如果代码抛出上面的A点,你会看到"Finally Block".如果代码抛出上面的B点,你就不会.

这通常是一种反模式.通常可以以更好的方式解决实际情况.