欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java如何保证获取一个类对象时,获取的是同一个对象

程序员文章站 2022-06-02 15:46:44
...

如何保证获取一个类对象时,获取的是同一个对象

一般我们获取一个类对象的时候一般会使用new关键字,也就是调用这个类的无参构造器,这样我们就会得到这个类的多个对象。
但是我们现在需要的是只要我们使用这个类获取的就是同一个对象,所以我们在编写这个类的无参构造器时就要使用private修饰。

//饿汉模式
//不管用不用 先创建对象 占用资源  线程安全
public class SingleClass {
	private static SingleClass t = new SingleClass();
	private SingleClass() {
		
	}
	
	public static SingleClass setB() {
		return t;
	}
}

测试一下

public class SingleTest  {
	public static void main(String[] args) {
		singleClass s = singleClass.setB();
		singleClass s1 = singleClass.setB();
		System.out.println("第一个对象:"+s);
		System.out.println("第二个对象:"+s1);
	}
}

结果:
java如何保证获取一个类对象时,获取的是同一个对象
还有一种方式

//懒汉模式
//需要才创建对象 线程不安全
public class singleClass1 {
	private static singleClass1 t;
	private singleClass1() {
		
	}
	
	public static singleClass1 setA() {
		if(t==null) {
			 t = new singleClass1();
		}
		return t;
	}
}

测试一下

public class SingleTest  {

	public static void main(String[] args) {
		singleClass1 s = singleClass1.setA();
		singleClass1 s1 = singleClass1.setA();
		System.out.println("第一个对象:"+s);
		System.out.println("第二个对象:"+s1);
	}
}

结果:
java如何保证获取一个类对象时,获取的是同一个对象
这两种方式在java里被称为饿汉模式和懒汉模式

再说一个题外话,如果我就想获取这个类的不同对象咋办。
这里我们就要用到反射了。
这里只写一个饿汉模式的反射

import java.lang.reflect.Constructor;

public class SungleClassFan {
	public static void main(String[] args) {

		Class<singleClass> c = singleClass.class;
		System.out.println(c.getName());
		
		try {
			
			Constructor<singleClass> con=c.getDeclaredConstructor(); 
			con.setAccessible(true);
			singleClass single = (singleClass)con.newInstance();
			System.out.println(singleClass.setB());
			System.out.println("无参私有构造方法:"+single);
	 
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

结果:
java如何保证获取一个类对象时,获取的是同一个对象

相关标签: java对象