“未处理的异常:java.io.IOException”编译时错误:究竟是什么?

时间:2016-02-10 12:03:59

标签: java exception

考虑以下未完成方法的片段:

private void synchronize(TreeItem<String> treeItem, Path newDir) {
    for (TreeItem<String> i : treeItem.getChildren()) {
        if (i.getGraphic().equals(GREEN_DOT)) {
            copyFile(new File(i.getValue()), newDir.toFile(), DEFAULT_COPY_BUFFER_SIZE);
        }
    }
}

在我的项目中,copyFile()调用带有下划线,IDE显示上述错误。我理解异常是什么,但我不太确定的是为什么需要通过在方法签名中添加“throws IOException”来修复此特定错误。为什么需要在那里;是不是在copyFile()的执行中抛出异常呢?通过在方法签名中键入这个小公式获得的效用是什么,将它传播到任何调用另一个方法的方法中已经写入了?

3 个答案:

答案 0 :(得分:2)

您需要声明您的方法可以抛出IOException,以便调用代码知道它可能会出现。方法中调用的方法声明throws IOException,因此编译器知道可能会在其中抛出IOException并中断您的方法,因此您还必须声明可以抛出IOException你的方法也可以中断调用代码。阻止错误的另一种方法是实际捕获异常。

答案 1 :(得分:1)

Java语言规范要求它。 原因可能是内置更好的文档,或者程序员总是记得处理这些异常。

如您所知,这不是强制性的,因为其他语言不需要这种声明,但Java确实如此。

答案 2 :(得分:-2)

不,所有处理文件的方法都需要抛出IOexception。