所谓单例模式就是为了确保类在内存中只有一个对象,之所以会出现单例模式是因为,单例模式在系统内存中只存在一个对象,可以节约资源
目录
一、饿汉式
二、懒汉式
该方式在开发中是经常用的,因为这个方式不容易出错
程序代码:
package com.hezhiying; public class Main { public static void main(String[] args) { // 创建的这两个对象都是Student类中的s Student s1 = Student.getStudent(); Student s2 = Student.getStudent(); System.out.println(s1 == s2); } } class Student { // 让该方法私有,这样外界就不能访问了 private Student() { }; // 由于外界不能创建对象,故自己创建一个,为了不让外界修改s的值,故加个private private static Student s = new Student(); // 提供一个公共的访问方式,需静态方法,以使类名直接调用,以达到外界能够访问 public static Student getStudent() { return s; } }运行结果:
该方法在开发中不容易用到,但是如果你去找工作,可能会被面试,因为这有个小坑,就是关于多线程的坑,在代码中有注释
程序代码:
package com.hezhiying; public class Main { public static void main(String[] args) { // 创建的这两个对象都是Student类中的s Student s1 = Student.getStudent(); Student s2 = Student.getStudent(); System.out.println(s1 == s2); } } class Student { // 让该方法私有,这样外界就不能访问了 private Student() { }; // 由于外界不能创建对象,故自己创建一个,为了不让外界修改s的值,故加个private private static Student s = null; // 提供一个公共的访问方式,需静态方法,以使类名直接调用,以达到外界能够访问 public synchronized static Student getStudent() { // 在这里,在多线程中可能会在线程一进了if,还没进行创建对象, // 线程二也进来了,这就会导致创建了两个对象,也就不是单例模式了,故需要用synchronized if (s == null) { s = new Student(); } return s; } }运行结果:
