Javaでは昔からリソースの解放がやたら面倒くさかった。 デストラクタはないしfinalizeはいつ呼ばれるかわからないので、try-finallyで明示的に解放メソッドを呼ぶ必要がある。finally節ではさらにnullチェックとか入ってひたすらややこしいコードになる。 InputStream in = null; OutputStream out = null; try { in = new FileInputStream("..."); out = new FileOutputStream("..."); // 例えばストリーム間のコピーとか StreamUtils.copy(in, out); } catch { (snip) } finally { if (out != null) { try { out.close(); } catch (IOException e) { //