JAVA枚举单例模式

关于单例模式的实现有很多种,网上也分析了如今实现单利模式最好用枚举,好处不外乎三点:
1.线程安全 
2.不会因为序列化而产生新实例 
3.防止反射攻击
关于第二点 序列化问题,有一篇文章说枚举类自己实现了 readResolve() 方法,所以抗序列化,这个方法是当前类自己实现的( 解决
关于第一点 线程安全,从反编译后的类源码中可以看出也是通过类加载机制保证的,应该是这样吧( 解决
关于第三点 反射攻击,我有自己试着反射攻击了以下,不过报错了...看了下方的反编译类源码,明白了,因为单例类的修饰是abstract的,所以没法实例化。

举个枚举的例子:
public enum MaYun {
	//定义一个枚举的元素,就代表MaYun的一个实例
	himself;
	private String anotherField;
	MaYun(){
		//MaYun诞生要做的事情
		//这个方法也可以去掉。将构造时候需要做的事情放在instance赋值的时候
		/**himself() = MaYun(){
		 *MaYun诞生要做的事情
		 *} 
		 */
		System.out.println("初始化");
		
	}

	public void splitAlipay(){
		System.out.println("Alipay是我的啦!");
	}
}

在main函数里是这样调用的:
public class Main {

	public static void main(String[] args){
		MaYun.himself.splitAlipay();
	}
	
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值