【问题标题】:Why I have to surround with try/cacth [duplicate]为什么我必须使用 try/catch [重复]
【发布时间】:2020-12-15 02:31:50
【问题描述】:

我有办法

private void writeObject(ObjectOutputStream oos) throws IOException 

在正文中我写了一些 HashMap 的 keySet

        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();
        }
    });

我不明白为什么

更新如果我在方法标题中宣布要丢弃它,我不明白为什么我需要在方法主体中处理异常。

【问题讨论】:

  • 你是说当你使用`for(E e : map.keySet()) { oos.writeObject(e); }` 你不必使用try catch 但是当替换代码时你必须使用try catch
  • 是的。对不起我的英语

标签: java try-catch


【解决方案1】:

这是因为 forEach() 将 Consumer 作为参数。并且未声明消费者会引发任何已检查的异常。所以你的 lambda 也应该是 Consumer 并且不要抛出任何已检查的异常。所以任何检查的异常都应该在你的 lambda body 中被捕获。

【讨论】:

  • 谢谢。我会去阅读更多关于 lambda 的内容
【解决方案2】:

try 块将执行可能引发异常的敏感代码 catch 块将在 try 块中抛出异常(捕获的类型)时使用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多