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

    技术2022-07-10  145

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

    一般我们获取一个类对象的时候一般会使用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); } }

    结果: 还有一种方式

    //懒汉模式 //需要才创建对象 线程不安全 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里被称为饿汉模式和懒汉模式

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

    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(); } } }

    结果:

    Processed: 0.011, SQL: 9