为什么此代码中需要"finally"块



我知道它是有效的创建一个try-catch段没有finally块。所以在破解这些代码的过程中,我无法找到答案Java逻辑(例如规则,理论)迫使我包含finally块在这段代码中-以及为什么finally块必须包含返回声明在里面。换句话说,如果我去掉最后一个我收到一个错误,如果我替换返回语句在finally块中与其他任何东西(例如System.out.printl(" foo")), I仍然收到一个错误,坚持要求我包含返回语句。再一次。这里编写的代码可以很好地编译和运行。我只是想弄明白try-catch-finally结构背后的一点理论(附:我理解这都是关于"异常处理"…但我的问题更多的是关于代码流和返回语句)。

class foo {
    int getInt() {
        try {
            String[] students = {"student1", "student2"};
            System.out.println(students[4]);
        }
        catch (Exception e) {
            return 10;
        }
        finally {
            return 20;
        }
    }
    public static void main(String args[]) {
        foo classSize = new foo();
        System.out.println(classSize.getInt());
    }
}

考虑没有finally的执行路径

int getInt() {
    try {
        String[] students = {"student1", "student2"};
        System.out.println(students[4]);
        // no return
    }
    catch (Exception e) {
        return 10; // if an exception occurs 
    }
    // no return
}

如果没有抛出异常会发生什么?你将没有返回值。

您可以提供finally并在那里放置返回值,也可以在try-catch块之外放置返回值。

请注意,try-catch-finally块中的finally有一个return语句,它将取代catchreturn语句,因为finally块总是在其相关的try[-catch]执行时执行。您可能想要使用以下

int getInt() {
    try {
        String[] students = {"student1", "student2"};
        System.out.println(students[4]);
        // the return could be here as well
    }
    catch (Exception e) {
        return 10; // in case of failure
    }
    return 20; // in case of success
}

所有的执行路径必须最终返回一个值(或者抛出一个异常)。

相关内容

  • 没有找到相关文章

最新更新