いくつかの静的メソッドとフィールドを使用して、状態の保存のシリアル化に取り組んでいます。私はそのシリアル化と静的が引き起こす騒乱を誓ったかもしれない。すべてのスタティックをトランジェントにする必要がありますか?そして、呼び出しを膨らませることで、通常どおり静力学が復元されますか?
static
sは暗黙的にtransient
であるため、そのように宣言する必要はありません。
シリアル化はインスタンスをシリアル化するためのものであり、クラスではありません。 static
フィールド(メソッドはクラス定義の一部であるためシリアル化されないため、メソッドは無関係です)は、クラスが読み込まれたときに設定された値に再初期化されます。
変更可能なstatic
フィールドがある場合、その値に加えられた変更は失われます。
短いルールは次のとおりです。
1. static
変数は、シリアル化中に保存されません。逆に、逆シリアル化プロセス中に、static
変数はクラスレベルの初期化から開始されます。
2. static
およびtransient
キーワードベースの変数は、シリアル化時にどちらも無視されます。
3.クラス名とserialVersionUID
は両方ともバイトストリームとしてシリアル化され、逆シリアル化されると、ソースから読み取られたserialVersionUID
がローカルクラスの同じstatic
変数と比較されます。これがserialVersionUID
がstatic public final
として宣言されているため、これらのバージョンUIDを比較するためにこれ以上オブジェクトを作成する必要はありません。
シリアル化では、static
フィールドは無視されます。
本来意図していたstatic
ではなくtransient
と記載するように更新...
static
フィールドはシリアル化されません。
静的フィールドを「ser」ファイルの一部にすることはできません。スタティック+トランジェントはトランジェントと同じです。
「クラスのインスタンスをシリアル化する場合、保存されるのは非静的で非一時的なインスタンスデータのみです。クラス定義は保存されません。オブジェクトを逆シリアル化するときに使用できる必要があります」 http://Java.Sun.com/developer/technicalArticles/ALT/serialization/