• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。)

"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。

このQ&Aのポイント
  • プログラム1で定義されているclose()の書き方について質問します。プログラム2のようなclose()の書き方が良いのかどうか確認したいです。プログラム1ではout.writeObject(memento)行の例外が発生すると、close()が実行されないため、プログラム2のようなfinallyブロックを使った書き方が良いのではないかと考えています。
  • プログラム1とプログラム2でのclose()の書き方について教えてください。プログラム1ではout.writeObject(memento)行の例外によって、close()が実行されない可能性があります。一方、プログラム2ではfinallyブロックを使ってclose()を実行するようにしています。どちらの書き方が良いのか、ご意見をお聞かせください。
  • プログラム1とプログラム2でのclose()の書き方について質問です。プログラム1では、out.writeObject(memento)行の例外によってclose()が実行されない可能性があります。一方、プログラム2ではfinallyブロックを使ってclose()を実行するようにしています。どちらの書き方が適切なのか、アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>私のこの考え方は正しいのでしょうか。 正しいです。質問者さんが書かれているやり方が一般的です。 念のため書いておきますが、outをtryの外で宣言しないとコンパイルが通りません。 まぁ、あくまでデザインパターンを学ぶための本ですから、細かなコーディングについて気にする必要はないでしょう(疑問を持つことは良いことですが)。

noname#91531
質問者

お礼

片岡です。 Bonjinさん、回答ありがとうございます。 close()の書き方について自信がなかったので、安心しました。 また、out変数の宣言については、私はわかっていませんでした。 ご指摘助かります。 変更後のプログラム ●プログラム3 public class Main { public static void saveMemento(Memento memento) { ObjectOutput out = null; try { out = new ObjectOutputStream(new FileOutputStream("game.dat")); out.writeObject(memento); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException ex) { ex.printStackTrace(); } } } } … //以下略 } public class Memento implements Serializable { … //以下略 } Bonjinさん、ありがとうございます。

関連するQ&A