java单例理解

试想下有这么一个场景,有一个类,整个项目都会用得到,使用的概率很频繁,你还会每用一次就new一次吗?这样做不是不可以,但是会很耗内存,这时就要想到用单例了。

单例有如下两个特点:

1.整个项目只有一个实例。

2.这个实例在项目中使用概率很高

单例又分为两种单例:

1.饱汉式单例(使用到了静态代码块,在类load进内存时,就加载了实例)

2.饿汉式单例(在创建实例时,当原来的对象为null则重新new个,否则还是用已存在的实例)

一般用于工具类比较多,我们直接看代码如何实现的吧!

/**
 * 饱汉式单例
 */

public class SingleInstance {
	

	static{
		instance = new SingleInstance();
	}
	
	private static SingleInstance instance;
	//将构造函数私有化,使外界无法通过构造函数获得对象
	private SingleInstance() {
		
	}
	
	public static SingleInstance getInstance() {
		return instance;
	}

}

/**
 * 饿汉式单例
 *
 */
public class SingleInstance2 {
	
	private static SingleInstance2 instance2;
	
	private SingleInstance2(){}
	
	public static SingleInstance2 getInstance2() {
		
		if (instance2 == null) {
			instance2 = new SingleInstance2();
		}
		return instance2;
	}
		
}
单例的优点:

1.避免类的重复创建

2.节约内存

3.避免多个实例引起程序逻辑错误的场合

以上是个人对单例的理解,如果有理解不当的地方,还请指出,一同进步,多谢了!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值