我有一个异常(MalformedDataException),它扩展了IOException。在代码中的某个地方,它会被抛出,并被主类临时“捕获”,如下所示:
public static void main(String[] args) throws MalformedDataException { ... }但是,,什么是输入/输出异常?,什么时候必须抛出?应该延长吗?
Oracle文档对此没有任何解释。
发布于 2013-07-01 20:45:44
输入/输出异常会扰乱正常的输入和输出操作。有目的地模糊地涵盖大量的场景,包括从已关闭的文件读取、从已删除的文件读取、从已关闭的套接字读取、对任何可能出错的内容进行读取或写入任何内容。
如果您编写的代码可以从故障中恢复(如试图在错误读取时重新连接的网络连接),则应捕获IOException并执行“恢复”过程以继续处理。如果您实际上没有从失败中恢复,您应该(可能)只允许IOException通过标记throws IOException方法提升到下一个级别。
捕获IOExceptions并对它们不做任何操作是一个很难调试的非常糟糕的bug的配方。你已经被警告过了。不要这样做。
您不应该扩展IOException,除非您有一种罕见的情况,即要抛出的“新”异常会因输入/输出不稳定而导致失败。在MalformedDataException的例子中,抛出它的原因是因为您从输入中读取了一些与您所期望的不一样的内容。
由于输入和输出通常会受到线路干扰,因此对于IOException是否适合处理格式错误的数据存在一些争议。我个人倾向于“不合适”的一面,因为这将导致人们质疑的完整性,而不是数据的完整性。
https://stackoverflow.com/questions/17413052
复制相似问题