【发布时间】:2011-10-24 02:33:18
【问题描述】:
一周前开始学习 java,并决定学习处理异常的正确方法。 Java 真的让我发疯了,因为指定方法可以抛出异常作为其签名的一部分。
我目前正在尝试为客户端-服务器应用程序实现多线程服务器。我对socket.close() 可以抛出 IOException 的事实感到非常惊讶。问题是,如果发生了我该怎么办?
...
final Socket socket = .... // at this point I know that I have a good socket
try {
..... // communicating with someone on that side....
} catch(IOException e) {
// communication failed
// this fact is useful, I can log it
// and will just hang up
} finally {
try {
socket.close(); // bye-bye
} catch(IOException e) {
// anything but logging I can do here?
}
}
...
这段代码是在一个单独的线程中执行的,所以我只需要必须捕获所有的异常。问题主要是心理上的 - 我知道,我可以将 catch 块留空,但我试图避免这个技巧。
有什么想法吗?
【问题讨论】:
-
那里没有很多事情可以做。最近的 Java 7 版本有一个
try-with-resources块,它会自动关闭您在 try 块中指定的任何资源,这有望永远解决这个问题。这个博客上有一个很好的例子:baptiste-wicht.com/2010/08/java-7-try-with-resources-statement -
对语义感到好奇。
FileInputStream.close()throws - 在这种情况下会是什么样子? -
快讯:Java 7 is no longer upcoming ;-)
-
@Joachim,你是对的。出于某种原因,我以为是八月底而不是七月
标签: java multithreading sockets exception