Java单例程个人思考

单例程的由来(自己根据需求分析,自己一步一步敲代码,修改得到):

想到一个问题:有多个对象来共同的操作一个对象,怎么实现呢?这里首先想到的

是限制随意的创建对象,可以用到的方法是将类的构造函数私有化,于是有了下面的一片代码:

<pre name="code" class="java">class Shiyan
{
      private Shiyan(){}
}
class ShiyanDemo
{
       public static void main(String[] args) 
       {
            Shiyan s = new Shiyan();    

		}
}

 当然程序是不能运行的,会提示   java:11: 错误: Shiyan()可以在Shiyan中访问private          
Shiyan s = new Shiyan();

这里连一个对象都不能创建,这里我又想到了创建对象不就是得到新开辟的内存空间的
地址嘛,我可以在类的内部写代码开辟内存空间,然后把这段内存空间的地址返回出去

就可以了,于是加上下面1,2 的代码:

<pre name="code" class="java"> class Shiyan
{
	Shiyan s = new Shiyan();             //   1. 加上的代码
	private Shiyan(){}
	public Shiyan chuangjianShiyan()    //    2. 加上的代码
	{
		return s;

	}
class ShiyanDemo
{
	public static void main(String[] args) 
	{
		Shiyan s = new Shiyan();    
	}
}

 
 

这里与遇到的问题是,还是要创建对象啊,怎么能不创建对象呢,想到了把

<pre name="code" class="java">public Shiyan chuangjianShiyan()    
{
	return s;
}

 
静态化,即加上static关键字,这样就能直接用类名来调用了,该函数的静态化导致我必须将   <pre name="code" class="java"> Shiyan s = new Shiyan(); 

这一句静态化,因为静态的函数不能调用非静态的成员变量,于是得到:

<pre name="code" class="java">class Shiyan
{
	Shiyan s = new Shiyan();
	Shiyan(){}
	public Shiyan chuangjianShiyan()
	{
		return s;
	}
}
class ShiyanDemo
{
	public static void main(String[] args) 
	{
		Shiyan s = Shiyan.chuangjianShiyan();
		System.out.println(s);
	}
}
 

这里继续把

static Shiyan s = new Shiyan();

私有化,得到

<pre name="code" class="java">class Shiyan
{
	static Shiyan s = new Shiyan();
	private Shiyan(){}
	static public Shiyan chuangjianShiyan()
	{
		return s;
	}
}
class ShiyanDemo
{
	public static void main(String[] args) 
	{
		Shiyan s1 = Shiyan.chuangjianShiyan();
		Shiyan s2 = Shiyan.chuangjianShiyan();
		System.out.println(s1);
		System.out.println(s2);
	}
}

 这就得到了单例程的程序代码。最重要的几点:1, 不能随意的创建对象-------构造函数私有化2, 静态函数不能调用非静态的成员变量--------- s的静态化上面的程序称为饿汉式单例程常用的为饱汉式单例程,需要在饿汉式单例程基础上做出修改 
<pre name="code" class="java">class Shiyan
{
	 static private Shiyan s = null;                   //
	private Shiyan(){}
	static public Shiyan chuangjianShiyan()
	 {
		if (s == null)                           //               
			s = new Shiyan();                //

		return s;
	}
}
class ShiyanDemo
{
	public static void main(String[] args) 
	{
		Shiyan s1 = Shiyan.chuangjianShiyan();
		Shiyan s2 = Shiyan.chuangjianShiyan();
		System.out.println(s1);
	}
}
个人也觉得饱汉式更好,既不无控制的创建对象,也更好理解!!!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值