为啥我必须使用 try/catch [重复]

Posted

技术标签:

【中文标题】为啥我必须使用 try/catch [重复]【英文标题】: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 是的。对不起我的英语 【参考方案1】:

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

【讨论】:

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

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

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

【讨论】:

以上是关于为啥我必须使用 try/catch [重复]的主要内容,如果未能解决你的问题,请参考以下文章

sqlConnection/Command 使用语句 + try/catch 块 [重复]

我如何让java在执行下一行之前等待一秒钟,而不使用try/catch [重复]

为啥我必须将每个 Thread.sleep() 调用包装在 try/catch 语句中? [复制]

使用 mockito [Spring-Boot] [重复] 测试 void 函数 try/catch 块

在 ExpressJS 响应中返回异步等待 try/catch 抛出错误 [重复]

try,catch和finally的执行顺序是啥[重复]