Java陷阱(四)
问题:优柔寡断
代码:
static void copy(String src, Stringdest) throws IOException { InputStream in = null; OutputStream out = null; try{ in = new FileInputStream(src); out = newFileOutputStream(dest); byte[] buf = new byte[1024]; int n; while ((n = in.read(buf)) > 0) out.write(buf, 0, n); } finally{ if (in != null) in.close(); if (out != null) out.close(); }}分析:问题在finally语句块自身中。close方法也可能会抛出IOException异常。如果这正好发生在in.close被调用之时,那么这个异常就会阻止out.close被调用,从而使输出流仍保持在开放状态。对close的调用可能会导致finally语句块意外结束。建议:对于任何在finally语句块中可能会抛出的被检查异常都要进行处理,而不是任其传播。
阅读链接:Java陷阱(一)
Java陷阱(二)
Java陷阱(三)
Java陷阱(四)