解决一个类在内存中只存在一个对象。
想要保证对象唯一需要做到的:
为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象为了其他程序能够访问自定义对象,可以对外提供一些访问方式解决方式
将构造函数私有化(对应上述1)在类中创建一个本类对象(对应上述2)提供一个`方法可以获取到该对象(对应上述3)代码体现
class Student { private Student(){} private String name; private static Student s = new Student(); public static Student getInstance() { return s; } public void setName(String name) { this.name = name; } public String getName() { return name; } } class SingleDemo { public static void main(String[] args) { Student s1 = Student.getInstance(); Student s2 = Student.getInstance(); s1.setName("Big-man"); System.out.println(s1.getName()); System.out.println(s2.getName()); } }上述Student类中,将构造函数私有化,外部类无法建立Student类对象,private static Student s = new Student(),在Student类中建立自身对象,并通过getInstance方法对外提供自身对象的访问方式。 主函数执行 Student s1 = Student.getInstance() 访问getInstance方法,把 Student 类的对象 s 地址值赋值给 s1,同样执行 Student s2 = Student.getInstance(),把对象 s 的地址值赋值给 s2 此时,s1 和 s2指向同一个对象。该方法是先初始化对象,称为***饿汉式***。
class Student { private String name; private int age; private Student(){} public static Student s = null; public static Student getInstance() { if(s == null) { s = new Student(); } return s;上述Student类加载进内存,但是对象并没有存在,只有调用了getInstance方法时。才会建立对象。对象是方法被调用时才初始化,叫做对象的延迟加载。称为***懒汉式***