Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我必须用try/cacth来包围_Java_Try Catch - Fatal编程技术网

Java 为什么我必须用try/cacth来包围

Java 为什么我必须用try/cacth来包围,java,try-catch,Java,Try Catch,我有办法 private void writeObject(ObjectOutputStream oos) throws IOException 在body中,我编写了一些HashMap的键集 for(E e : map.keySet()) { oos.writeObject(e); } 看起来还不错 但是如果我想在上面重放这段代码 map.forEach((k, v) -> oos.writeObject(k)); 我必须用try/catc

我有办法

private void writeObject(ObjectOutputStream oos) throws IOException 
在body中,我编写了一些HashMap的键集

        for(E e : map.keySet()) {
        oos.writeObject(e);
    }
看起来还不错 但是如果我想在上面重放这段代码

map.forEach((k, v) -> oos.writeObject(k));
我必须用try/catch来包围它。像这样

        map.forEach((k, v) -> {
        try {
            oos.writeObject(k);
        } catch (IOException e) {
            e.printStackTrace();
        }
    });
我不明白为什么


更新如果我在方法标题中声明要丢弃异常,我无法理解为什么我需要在方法正文中处理异常。

try块将执行敏感代码,该代码可能抛出异常 每当在try块中抛出异常(类型为catch)时,将使用catch


方法原型中的throws关键字用于指定方法可能会抛出指定类型的异常。当您选中了不希望在当前方法中捕获的异常(您必须处理的异常)时,它非常有用。

这是因为forEach()将Consumer作为参数。并且未声明使用者抛出任何已检查的异常。因此,您的lambda也应该是使用者,并且不抛出任何已检查的异常。因此,任何选中的异常都应该在lambda主体中捕获。

您是说当您使用`for(E:map.keySet(){oos.writeObject(E);}`时,您不必使用
try catch
,但当替换代码时,您必须使用
try catch
?是的。对不起,我的英语不好,谢谢。我会去读更多关于lambda的书