• 静态内部类实现单例模式


    静态内部类

    静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:

    1. 它的创建是不需要依赖外围类的创建。
    2. 它不能使用任何外围类的非static成员变量和方法。

    Example(静态内部类实现单例模式)

     1 public class Singleton {
     2 
     3     //声明为 private 避免调用默认构造方法创建对象
     4     private Singleton() {
     5     }
     6 
     7    // 声明为 private 表明静态内部该类只能在该 Singleton 类中被访问
     8     private static class SingletonHolder {
     9         private static final Singleton INSTANCE = new Singleton();
    10     }
    11 
    12     public static Singleton getUniqueInstance() {
    13         return SingletonHolder.INSTANCE;
    14     }
    15 }

    当 Singleton 类加载时,静态内部类 SingletonHolder 没有被加载进内存。只有当调用 getUniqueInstance() 方法从而触发 SingletonHolder.INSTANCE 时 SingletonHolder 才会被加载,此时初始化 INSTANCE 实例,并且 JVM 能确保 INSTANCE 只被实例化一次。

    这种方式不仅具有延迟初始化的好处,而且由 JVM 提供了对线程安全的支持。

  • 相关阅读:
    bit、byte、word的区别
    JavaScript
    品牌的意义
    Java开发
    Java:关于implements Serializable的警告问题
    文件路径:/和的区别
    Iterator
    parameter和argument的区别
    Java中private、protected、public和default的区别
    Java异常
  • 原文地址:https://www.cnblogs.com/xiekun96/p/14217971.html
Copyright © 2020-2023  润新知