我是Java编程的初学者。但我有以下代码
Socket socket = serverSocketObj.accept();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
try {
writer.writeLine();
} catch(IOException e ) {
//write to logger here
} finally {
writer.close(); // this throws IOExceptioin too. What to do with it
// Possible memmory leak?
socket.close();
}
当我尝试关闭writer
时,我应该处理另一个异常。但我不知道该怎么做。在我的情况下这个例外是不可能的吗?我可以忽略它吗?
答案 0 :(得分:2)
如果您不知道如何处理它们,请抓住它们并记录下来
记录它们的最简单方法是e.printStackTrace()
这样,
至少你会发现如果发生异常就会出现问题。
另一种方法是将异常重新抛出到高级代码
例如。如果你的方法(你的示例代码是)声明抛出IOException
,
那你就不用担心了。让上级代码担心它。
答案 1 :(得分:1)
检查编写器和套接字是否为空。
Socket socket = serverSocketObj.accept();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
try {
writer.writeLine();
} catch(IOException e ) {
//write to logger here
} finally {
if(writer != null)
writer.close(); // this throws IOExceptioin too. What to do with it
// Possible memmory leak?
if(socket != null)
socket.close();
}
答案 2 :(得分:1)
不幸的是,为了使编译器满意,您必须从close
语句中捕获潜在的IOExceptions(假设您没有将IOException添加到方法的throws
子句中)。 (谢谢Goodenough先生!)
但除了记录异常之外,除了记录异常外,没有什么可以真正“处理”异常。
(我认为Java中的新“try with resources”结构可能会更清晰地处理这个问题。)