我有一个例外(MalformedDataException
),它扩展了IOException
。在代码的某个地方抛出它,它被主类暂时“捕获”,如下所示:
public static void main(String[] args) throws MalformedDataException { ... }
但究竟是什么输入/输出异常?什么时候必须抛出?它应该延长吗?
Oracle文档不会解释有关它的任何内容。
答案 0 :(得分:4)
输入/输出异常会混淆正常的输入和输出操作。涵盖各种各样的场景是有目的的含糊不清的,包括从已关闭的文件中读取,从已删除的文件中读取,从已关闭的套接字读取,以及读取或写入可能出错的任何内容任何事情。
如果编写可以从失败中恢复的代码(例如尝试在错误读取时重新连接的网络连接),则应捕获IOException
并执行“恢复”过程以继续处理。如果您实际上没有从失败中恢复,您应该(可能)通过标记方法IOException
来允许throws IOException
升级到下一个级别。
捕获IOExceptions
并对它们不采取任何措施是一个难以调试的非常糟糕的错误。你被警告了。不要这样做。
你不应该扩展IOException
,除非你的罕见情况是你的“新”异常会因输入/输出不稳定而导致失败。在MalformedDataException
的情况下,抛出它的原因是因为您从输入中读取的内容甚至看起来不像您期望的那样。
由于输入和输出通常受到线路干扰,因此IOException
是否适合格式错误的数据存在一些争议。我个人倾向于“不合适”的一面,因为它会引导人们质疑生产线的完整性,而不是数据的完整性。