Java中单例

singleton模式:

    在JAVA中可能有些类我们希望在内存中只存在一个实例,我们就可以用单例模式了。这样做的好处就是避免了垃圾回收器频繁地实例化对象,销毁对象。从而浪费系统时间。下面是一个简单的单例实现:

public class SingletonDemo {
   
 private int a = 0;//定义这个变量是用来测试用的
 private static SingletonDemo singletonDemo = null;
 private SingletonDemo()//这里的构造器只会调用一次
 {
  System.out.println("......in constructor");
 }
 public static SingletonDemo getSingletonInstance()//获得实例的方法
 {
  if(singletonDemo==null)//判断对象是否已经存在
  {
   singletonDemo = new SingletonDemo();//
  }
  return singletonDemo;
 }
 public static void main(String[] args) {//测试用的MAIN方法
  
  SingletonDemo sd = SingletonDemo.getSingletonInstance();
  
  SingletonDemo sd2 = SingletonDemo.getSingletonInstance();
  
  System.out.println("sd a="+sd.a++);
  
  System.out.println("sd2 a="+sd2.a);
  
  System.out.println("sd=sd2?"+(sd==sd2));
 }
}

 

测试结果:

......in constructor 

可以看到构造函数只执行了一次,说明确实只有一个对象被创建了,
sd a=0
sd2 a=1  //本来是sd中a加了1 而sd2 中的a变成了1 说明是同一个实例
sd=sd2?true//这里相等说明是同一个内存区域 所以是同一个实例

 

注意:使用单例时要注意线程安全的问题

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值