您的位置:首页 > 编程语言 > Java开发

Java中如何实现一个类在内存里只能创建一个实例对象

2011-08-24 14:29 801 查看
关键字:限制一个类只能创建一个对象,java类的实例化.

1.如何实现一个类在内存里如论如何只能创建一个实例对象?

2.A类中的方法如何去访问B类中的私有(private)构造方法呢?

针对以上问题,举例说明如下.

class Onlie
{
	static Onlie o=new Onlie();//创建实例对象并把它赋给静态类型的对象变量o.

	private Onlie()
	{
		System.out.println("这是一个私有构造方法!");//私有构造方法
	}
	
	public static Onlie retClass()
	{
		return o;		
	}
	/*Onlie是该方法的返回类型.创建这个方法的目的:让Mvt类中用Onlie类名来访问,以此让Mvt类得到Onlie类的实例对象,在Mvt类中虽然不能创建Onlie类的实例对象,原因是:Onlie对象一运行,Onlie类的构造方法也会随之运行,而a类的构造方法是私有的(private),不能被Mvt类访问,所以我们把Onlie类定义成静态的,静态之间调用可以直接用类名.总之,只要在一个类里声明有private构造方法,在别的类中无法对这个类进行实例.这也叫单态模式.retClass方法必须为static型,因为它要被main方法访问,而main方法考虑到Onlie类中有私有构造方法,不能对Onlie类进行实例化.所以main方法只能通过retClass方法的类名调用retClass方法.但,这前提必须是gettffa是静态型的.*/
	
	String huifu()
	{
		return "收到了!";
	}
}

class Mvt
{
	public static void main(String[]arges)
	{
		Onlie on=Onlie.retClass();
		//Onlie.retClass():在Mvt类中的静态方法里,直接用retClass()的类调用retClass().整条语句的作用是接受
		//Onlie类的实例对象.但该条语句一运行,就可以实现:在Mvt中调用Onlie类中的private构造方法.
		
		String s=on.huifu();
		System.out.println("s="+s);
		
		Onlie on2=Onlie.retClass();
		
		if(on==on2)//判断on与on2是否相等
		{
			System.out.println("on和on2的内存位置没变,接受的值也没变化");
		}
		else
		{
			System.out.println("on和on2的内存位置有变化!");
	
		}
		
	}
}

/*
	打印结果:
	
这是一个私有构造方法!
s=收到了!
on和on2的内存位置没变,接受的值也没变化

*/
小结:

①.其他类不能对私有构造方法的所属类进行实例化,但其他类能接受私有构造方法所属类的对象这好比,自己不能产生某种工具,但能接受工具一样,一旦接到工具,工具不会因在不同人的手中而失去原有的功能.

②.对象调用一个方法,若该方法有返回值,这个值会返回到调用点.这好比,力的相互作用(当然,受力方要有弹性),这里的"弹性"寓意是否有返回值.



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐