Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别

2022-12-20,,,,

Java的单例模式——饿汉式

package com.swift;
//Java单例设计模式——恶汉式
public class SinglePerson {
private String name="The God";
private int age=10000;
private static SinglePerson person=new SinglePerson();//生成对象放在java静态池中,否则如果非静态在堆中,生命周期比类短
private SinglePerson() {};//构造方法私有化可以避免大量实例化对象而消耗内存
public static SinglePerson getSinglePerson() {//静态方法类外部可以通过类名.获取
return person;
}
@Override
public String toString() {
return "SinglePerson [name=" + name + ", age=" + age + "]";
}
}

Demo类调用

package com.swift;

public class DemoSinglePerson {

    public static void main(String[] args) {
SinglePerson s=SinglePerson.getSinglePerson();
System.out.println(s.toString());//得到唯一的对象
}
}

Java的单例模式——懒汉

package com.swift;

//单例模式——懒汉模式
public class SinglePerson$Lazy {
private String name = "The God";
private int age = 10000;
private static SinglePerson$Lazy person = null;// 懒汉是不会这么急的,他要等调用get方法时才生成对象,就位了节省这一个对象的空间 private SinglePerson$Lazy() {
};// 如果大量使用对象实例化操作来调用对象那么消耗内存会不断增大 public static SinglePerson$Lazy getSinglePerson() {
synchronized (SinglePerson$Lazy.class) {//静态方法使用的同步锁用——类名.class
if (person == null) {// 这样的写法在线程中会造成异常,多个线程同时执行创建对象,所以外边加锁,一次只能一个线程进来
person = new SinglePerson$Lazy();
return person;
} else {
return person;
}
}
} @Override
public String toString() {
return "SinglePerson [name=" + name + ", age=" + age + "]";
}
}

Demo类调用

package com.swift;

public class DemoSingglePerson$Lazy {

    public static void main(String[] args) {
SinglePerson$Lazy s=SinglePerson$Lazy.getSinglePerson();
System.out.println(s.toString());
} }

Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别的相关教程结束。

《Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别.doc》

下载本文的Word格式文档,以方便收藏与打印。