0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

備忘-直列化 & static

Posted at

直列化

インスタンスをバイト列に変換したり、その反対をしたりすることができる仕組みのことです。直列化することにより、ファイルを保存したり、ネットワークで送ったりすることができる様になります。直列化対象のクラスは、java.io.Serializableを実装することが必要になります。

public class Product implements Seralizable {
    private String name;
    private Deals id;
    private int price;
    }

ProductsクラスとDealsクラスが直列化を実装していた場合、Productsインスタンスを直列化したときにDealsインスタンスも直列化されます。一方でDealsクラスが直列化を実装していなかった場合はバイト列に変換されたとき、Dealsインスタンスの情報は含まれません。また、復元した場合、idフィールドがnullの状態で復元されます。

加えて、直列化した後に資産が更新された場合、直前で直列化してしまったファイルは矛盾が生じた状態で復元します。この矛盾を未然に防ぐため、シリアルバージョンUIDをクラスに宣言しておきます。シリアルバージョンUIDがあることで、上記のようなことが発生した場合は例外処理が走るようになります。

static

new せずに気軽に呼び出すことができるようにする仕組みです。ex)Integer.parseInt() インスタンスのフィールドにstaticが加えられた場合(static変数)、クラスの上にみんなが利用できます。

public class Product implements Seralizable {
    static String name;
    private Deals id;
    private int price;
    }

利用する場合は、クラス名.変数名で可能です。上記の場合では、Product.nameで利用できます。また、クラスの上で作られる箱と説明しましたが、product1やproduct2のようなインスタンスを生成した場合は各インスタンスがstatic変数nameを共有して利用していきます。

また。staticはメソッドにも加えることができます。

public static class Product implements Seralizable {
    static String name;
    private Deals id;
    private int price;
    }

クラスにstaticを加えることにより、インスタンスを生成することなくメソッドを呼び出すことができるようになります。

一方で、staticメソッド内では、同一クラス内のstaticがついていない変数を使用することができません、また、メソッドを使用せずにインスタンスを渡す必要がある場合は、通常通りにインスタンスを生成しないといけません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?