⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 substitute.java

📁 java的书上例子
💻 JAVA
字号:
//Substitute.java
//本例创建一个symbol类,与每一个symbol绑定的类只有单一的实例。
//symbol类定义了readResolve方法,从外边创建创建一个symbol类时,
//调用symbollookup方法,如果该符号已存在时,返回该符号,不存在时创建它。
//这样确保虚拟机中符号唯一性。
//当符号开始读时,调用readResolve方法,已有的Symbol对象利用哈希表结构
//(hashtable)进行唯一性管理。
//打印两个符号是否用相同名字串行化
import java.io.*;
import java.util.*;
public class Substitute 
{
	//一般,串行化和非串行化两个符号用相同的名字说明它们就是相同的符号
	public static void main(String args[])
	{
		//创建几个串行化的symbol类
		Symbol s1 = Symbol.symbolLookup("blue");
		Symbol s2 = Symbol.symbolLookup("pink");
		Symbol s3 = Symbol.symbolLookup("blue");
		//用它们非串行化符号
		Symbol obj1 = null, obj2 = null, obj3 = null;
		//串行化符号
		try {
			FileOutputStream fo = new FileOutputStream("symbol.tmp");
			ObjectOutputStream so = new ObjectOutputStream(fo);
			so.writeObject(s1);
			so.writeObject(s2);
			so.writeObject(s3);
			so.flush();
		}
		catch (Exception e)
		{
			System.out.println(e);
			System.exit(1);
		}
		//非串行化符号
		try {
			FileInputStream fi = new FileInputStream("symbol.tmp");
			ObjectInputStream si = new ObjectInputStream(fi);
			obj1 = (Symbol) si.readObject();
			obj2 = (Symbol) si.readObject();
			obj3 = (Symbol) si.readObject();
		}
		catch (Exception e) 
		{
			System.out.println(e);
			System.exit(1);
		}
		//显示唯一性 
		if (obj1 == obj3) {
			System.out.println("Symbol1 and Symbol3 are the same!");
		}
	}
}

class Symbol implements Serializable 
{
	String symbolname;
	//哈希表结构是静态的  (Hashtable是static),
	//因为对任一对象都用同一个哈希表
	static Hashtable ht = new Hashtable();
	static Symbol symbolLookup(String symname)
	{
		if (ht.containsKey(symname))
		{
			return (Symbol)(ht.get(symname));
		}
		else
		{
			Symbol newSym = new Symbol(symname);
			ht.put(symname, newSym);
			return(newSym);
		}
	}
	
	private Symbol (String name)
	{
		symbolname = name;
	}

	public Object readResolve() throws ObjectStreamException
	{
		if (!ht.containsKey(symbolname))
			ht.put(symbolname, this);
		return (Symbol) (ht.get(symbolname));
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -