本文介绍单例模式的第一种策略
这是最为易于理解和使用的单例模式。
它的策略是,在类的内部定义一个静态的变量,并且在定义的时候就已经完成了初始化,这是因为jvm保证了一个类只会被加载到内存一次。这个变量的初始化的时机是在类被加载的时候,静态变量也被分配内存,并且完成了初始化。
同时,它的构造方法被定义为私有方法,因此获取实例只能通过类调用静态方法public static Student01 getInstance()
,来返回已经初始化的实例。
- 优点
- 使用简单,编码方便
- 易于理解,即使是刚入门的Java程序员也能够轻易读懂下面的代码
- 缺点
- 属于饱汉式模式,即使没有任何一个线程需要使用这个实例,那么它也会一直存在于内存中,占用内存(除非对于内存的要求极为苛刻,否则,这种内存的影响微乎其微,可忽略)。
代码部分
package singleton;
/**
* 类加载到内存之后,就实例化一个对象,jvm保证线程安全,因为一个jvm只会加载一次类信息
* 简单实用,推荐实用
* 唯一缺点,不论用到与否,都会实例化一个对象出来
*/
public class Student01 {
public final static Student01 student = new Student01();
private Student01() {
}
public static Student01 getInstance() {
return student;
}
public static void main(String[] args) {
Student01 instance = Student01.getInstance();
Student01 instance1 = Student01.getInstance();
System.out.println(instance==instance1);
}
}