一个Singleton类如果可序列化,则除实现java.io.Serializable标记接口,还需定义
private Object readResolve() throws ObjectStreamException;
如果没有第二步则在反序列化的时候会重新生成一个对象.因而失去了Singleton.
原因在于:反序化也相当于构造方法生成一次对象.
import java.io.*;
public class Thing implements Serializable
{
private int id;
private String name;
private static Thing thing = new Thing();
private Thing() {
this.id = -1;
this.name = "default";
}
public static Thing getInstance() {
return thing;
}
public String toString() {
return "Thing:[" + this.id + "," + this.name + "]";
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
private Object readResolve() throws ObjectStreamException {
return thing;
}
public static void main(String[] args) throws Exception{
Thing thing = Thing.getInstance();
System.out.println(thing);
thing.setName("new name");
System.out.println(thing);
Thing thing2 = Thing.getInstance();
System.out.println(thing2);
System.out.println(thing == thing2);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
new FileOutputStream(
new File("F:/aa.txt")));
objectOutputStream.writeObject(thing);
objectOutputStream.close();
ObjectInputStream objectInputStream = new ObjectInputStream(
new FileInputStream(
new File("F:/aa.txt")));
Thing thingSerializble = (Thing)objectInputStream.readObject();
objectInputStream.close();
System.out.println(thing == thingSerializble);
System.out.println(thingSerializble);
}
}
分享到:
相关推荐
参见 http://blog.csdn.net/xcl168 Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把... 其中Parcelable接口 Serializable接口 Singleton模式 Bundle方式各有一个代表性的例子。
preferences存储键值数据具有工厂构造函数的Singleton模式使用mockito单元测试特征按城市名称搜索显示城市的天气状况检测当前位置并显示其天气状况记住以前搜索过的位置依存关系json_serializable 地理定位器shared_...
专题:单例模式与MX记录 com.javapatterns.multilingual 专题:多例模式与多语言支持 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.builder 建造者模式 ...
com.javapatterns.serializable 专题:JavaBean的“冷藏”和“解冻” com.javapatterns.servlet 专题:Servlet技术中的模式 com.javapatterns.simplefactory 简单工厂模式 com.javapatterns.singleton 单态模式 ...
14.Serializable 15.MVC (Struts的工作流程) 16.什么是MDA 17.tcp与udp的区别 18.链表与散列表和数组的区别 19.堆和栈的区别 20.ejb的分类及区别 21.你对现在软件业以及国内软件业的看法 22.谈谈java多...
singleton 示例 枚举的简单教程: “方法签名”是方法名称和参数列表 注释是关于程序的额外信息,它是一种元数据。 它可以被编译器使用,甚至可以在运行时使用。 @Override 仅在引用方法时才允许。 正如没有覆盖字段...
Item 3: Enforce the singleton property with a private constructor or an enum type Item 4: Enforce noninstantiability with a private constructor Item 5: Prefer dependency injection to hardwiring ...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。 答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
或者请解释Serializable接口的作用。 75、描述一下JVM加载class文件的原理机制? 76、heap和stack有什么区别。 77、GC是什么? 为什么要有GC? 78、垃圾回收的优点和原理。并考虑2种回收机制。 79、垃圾回收器的...
或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...
或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...
或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...
或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...
或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...
或者请解释Serializable接口的作用。 56 75、描述一下JVM加载class文件的原理机制? 56 76、heap和stack有什么区别。 57 77、GC是什么? 为什么要有GC? 57 78、垃圾回收的优点和原理。并考虑2种回收机制。 57 79、垃圾...
或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79...