为啥我必须使用 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 块