※ 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()を実行するようにしています。どちらの書き方が適切なのか、アドバイスをお願いします。
"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。
こんにちは、片岡と言います。
プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。
私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。
私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。
●プログラム1
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
… //以下略
}
public class Memento implements Serializable {
… //以下略
}
●プログラム2
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput 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 {
… //以下略
}
なお、私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
開発環境:Eclipse 3.2.2
java: java version "1.4.2_13"
お礼
片岡です。 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さん、ありがとうございます。