如何处理java中的异常?

时间:2014-01-31 19:18:57

标签: java exception-handling

我是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时,我应该处理另一个异常。但我不知道该怎么做。在我的情况下这个例外是不可能的吗?我可以忽略它吗?

3 个答案:

答案 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”结构可能会更清晰地处理这个问题。)