直列化
インスタンスをバイト列に変換したり、その反対をしたりすることができる仕組みのことです。直列化することにより、ファイルを保存したり、ネットワークで送ったりすることができる様になります。直列化対象のクラスは、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がついていない変数を使用することができません、また、メソッドを使用せずにインスタンスを渡す必要がある場合は、通常通りにインスタンスを生成しないといけません。