【发布时间】:2011-08-12 23:20:58
【问题描述】:
有没有办法获得有关 Java 标准类的异常安全方面的一些详细信息?主要使用 C++ 和 C#,我对 Java 异常规范感到困惑,所以我需要了解处理异常的正确方法。
更具体地说,让我们考虑ServerSocket。一旦构建了它的对象,它就开始监听传入的连接。然后,您应该使用accept() 接受连接(如果有人尝试连接)。
如果您之前使用setSoTimeout() 配置了您的服务器套接字,则accept() 将抛出SocketTimeoutException 的更改,因为在指定的时间段内没有人尝试连接。没关系,服务器套接字仍然可用,所以你只需再次调用accept()。
但是SocketTimeoutException 并不是accept() 可能抛出的唯一东西。所有其他例外是什么意思?如果我使用 2 个 catch 子句对accept() 的调用进行包装:对于SocketTimeoutException 和IOException,在我进入IOException 子句后,我还能安全使用相关的ServerSocket 实例吗?
我非常感谢 Java 范围和 ServerSocket 特定的答案。
【问题讨论】:
-
您必须深入研究 javadocs 才能了解所有其他异常的含义。有据可查的东西可以解释发生了什么。在 Java 范围内,没有答案。异常发生后该对象仍然存在,但该对象所处的状态取决于该特定事物的实现。
-
@John Gardner:已经花太多时间阅读文档了。没有明确的答案。 “发生 I/O 错误”代表什么?这是否意味着我的 LAN 卡已经死了,或者只是网络延迟了几秒钟?虽然第一个很关键,但第二个并不是那么明显“不可恢复”。
标签: java exception-handling exception-safe exception-safety