类加载时创建,保证线程安全
从Color类中可以看出, Color对象是在静态域创建,由类加载时初始化,JVM保证线程安全,这样就能确保Color对象不会因为并发同时请求而错误的创建多个实例....而枚举则不同,在序列化的时候Java仅仅是将枚举对象的name属性输出到结果中,反序列化的时候则是通过Enum的valueOf()方法来根据名字查找枚举对象。...反射创建单例对象
解决方案 : 在构造上述中判断,当多于一个实例时,再调用构造函数,直接报错.
反序列化时创建对象
解决方案 : 使用readResolve()方法来避免此事发生.......
}
}
所以,枚举实现的单例,可以说是最完美和简洁的单例了.推荐大家使用这种方式创建单例....(此处还忽略了$VALUS数组的创建消耗).
单个枚举类型常量,比static final声明的常量占用的内存大的多.