2012-05-10 6 views
2

私は「どのようにしてJavaでオブジェクトを作成できますか」について読んでいます。 new演算子を使用して、オブジェクトのクローニングとシリアライゼーションは、 "new"とリフレクションを使用する方法とどう違うのですか?

  1. 作成:

    は、私は4つの方法を見つけました。
  2. クローニング
  3. シリアライゼーション
  4. 反射。

新しいと反射で、私はこれらの2つの方法でうまくいきます。

、私の質問は:

は、なぜ人々は、オブジェクトを作成するためのさまざまな方法としてクローニングおよび直列化を検討していますか?

+0

以下のMarkoの答えは、「クローニングとシリアライゼーション」が「新旧」と異なる理由をよく説明しています。 VMマジックにあなた自身の魔法を追加したいのであれば、あなたは別のことをする必要があるからです。 –

答えて

1

オブジェクトをクローンすると、元のオブジェクトとは異なるメモリ部分にあるものを扱っていることになります。はい、同じプロパティを持つかもしれませんが、2つの異なるメモリブロックを持つ2つの異なるポインタです。

オブジェクトをシリアル化解除すると、存在しなかったオブジェクトが存在します。シリアル化してすぐにシリアル化解除する場合でも、元のオブジェクトとは独立して存在します。

+0

よく言っています。貴重なコメントをいただきありがとうございます。 –

7

ここで非常に重要な点は、オブジェクトの直列化にはのコンストラクタがないことです。プロセスにはコンストラクタが含まれているため、オブジェクトを作成する別の方法です。これはクローニングにも当てはまります。メソッドObject.cloneは、JVMの魔法で新しいオブジェクトを作成しますが、コンストラクタは含まれていません。実際には、これらの2つの方法とnewのリフレクションは、特定のコンストラクタを含むプレーンバニラオブジェクトのインスタンス化を呼び出すための少し異なる方法であるため、実際には大きな違いがあります。

関連する問題