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