本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/76037457
类在内存中的对象只有一个 单例模式分为: 饿汉式 / 懒汉式 / 静态内部类 / 枚举 饿汉式public class 饿汉式 { private static final 饿汉式 instance = new 饿汉式(); private 饿汉式(){} public static 饿汉式 getInstance(){ return instance; } public void show(){ System.out.println('饿汉式'); }} - 在一开始直接创建对象, 而不管你是否用的上该对象, 比较浪费内存;
- 优点是, 线程安全.
懒汉式public class 懒汉式 { private static 懒汉式 instance; private 懒汉式(){} public static 懒汉式 getInstance(){ if (instance == null){ synchronized (懒汉式.class){ if (instance == null){ instance = new 懒汉式(); } } } return instance; } public void show(){ System.out.println('懒汉式'); }} - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
静态内部类public class 静态内部类 { private 静态内部类(){} public static 静态内部类 getInstance(){ return Instance.instance; } /** * 静态内部类 * @author Luzhuo */ private static class Instance{ private static final 静态内部类 instance = new 静态内部类(); } public void show(){ System.out.println('静态内部类'); }} - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- static final 只允许被赋值一次, 该对象被赋值后, 直接调用而不会再次创建对象. 且该对象不能再被赋值修改.
枚举public enum 枚举 { Instance; public void show(){ System.out.println('枚举'); }} - 枚举类型是静态常量, 隐式地用static final修饰过;
- 源码中使用static{}创建枚举类对象, 所以也属于饿汉式的一种.
使用public class Test { public static void main(String[] args) { // 饿汉式 饿汉式(); // 懒汉式 懒汉式(); // 静态内部类 静态内部类(); // 枚举 枚举(); } public static void 饿汉式(){ 饿汉式 obj1 = 饿汉式.getInstance(); 饿汉式 obj2 = 饿汉式.getInstance(); obj1.show(); obj2.show(); System.out.println(obj1 == obj2); //true } public static void 懒汉式(){ 懒汉式 obj1 = 懒汉式.getInstance(); 懒汉式 obj2 = 懒汉式.getInstance(); obj1.show(); obj2.show(); System.out.println(obj1 == obj2); //true } public static void 静态内部类(){ 静态内部类 obj1 = 静态内部类.getInstance(); 静态内部类 obj2 = 静态内部类.getInstance(); obj1.show(); obj2.show(); System.out.println(obj1 == obj2); //true } private static void 枚举() { 枚举 obj1 = 枚举.Instance; 枚举 obj2 = 枚举.Instance; obj1.show(); obj2.show(); System.out.println(obj1 == obj2); // true }} - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
|