`
H_eaven
  • 浏览: 31395 次
  • 性别: Icon_minigender_1
  • 来自: 鲨堡
文章分类
社区版块
存档分类
最新评论

singleton与serializable

阅读更多
一个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);
	}
}


分享到:
评论

相关推荐

    Android参数传递方法汇总

    参见 http://blog.csdn.net/xcl168 Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把... 其中Parcelable接口 Serializable接口 Singleton模式 Bundle方式各有一个代表性的例子。

    weather-cross-platform:一个简单的跨平台天气应用,展示了各种Flutter编程技术

    preferences存储键值数据具有工厂构造函数的Singleton模式使用mockito单元测试特征按城市名称搜索显示城市的天气状况检测当前位置并显示其天气状况记住以前搜索过的位置依存关系json_serializable 地理定位器shared_...

    JAVA与模式

    专题:单例模式与MX记录 com.javapatterns.multilingual 专题:多例模式与多语言支持 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.builder 建造者模式 ...

    源码:阎宏设计模式光盘

    com.javapatterns.serializable 专题:JavaBean的“冷藏”和“解冻” com.javapatterns.servlet 专题:Servlet技术中的模式 com.javapatterns.simplefactory 简单工厂模式 com.javapatterns.singleton 单态模式 ...

    JAVA面试题最全集

    14.Serializable 15.MVC (Struts的工作流程) 16.什么是MDA 17.tcp与udp的区别 18.链表与散列表和数组的区别 19.堆和栈的区别 20.ejb的分类及区别 21.你对现在软件业以及国内软件业的看法 22.谈谈java多...

    程序员考试刷题-OCP-notes:OCP学习笔记

    singleton 示例 枚举的简单教程: “方法签名”是方法名称和参数列表 注释是关于程序的额外信息,它是一种元数据。 它可以被编译器使用,甚至可以在运行时使用。 @Override 仅在引用方法时才允许。 正如没有覆盖字段...

    Effective Java 3rd edition(Effective Java第三版英文原版)附第二版

    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面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    net学习笔记及其他代码应用

    24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。 答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    Java面试宝典2010版

    或者请解释Serializable接口的作用。 75、描述一下JVM加载class文件的原理机制? 76、heap和stack有什么区别。 77、GC是什么? 为什么要有GC? 78、垃圾回收的优点和原理。并考虑2种回收机制。 79、垃圾回收器的...

    最新Java面试宝典pdf版

    或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...

    Java面试笔试资料大全

    或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...

    Java面试宝典-经典

    或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...

    JAVA面试宝典2010

    或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...

    java面试题大全(2012版)

    或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79、垃圾...

    java面试宝典2012

    或者请解释Serializable接口的作用。 56 75、描述一下JVM加载class文件的原理机制? 56 76、heap和stack有什么区别。 57 77、GC是什么? 为什么要有GC? 57 78、垃圾回收的优点和原理。并考虑2种回收机制。 57 79、垃圾...

    Java面试宝典2012版

    或者请解释Serializable接口的作用。 51 75、描述一下JVM加载class文件的原理机制? 52 76、heap和stack有什么区别。 52 77、GC是什么? 为什么要有GC? 52 78、垃圾回收的优点和原理。并考虑2种回收机制。 52 79...

Global site tag (gtag.js) - Google Analytics