zoukankan      html  css  js  c++  java
  • 静态内部类实现单例模式

    静态内部类

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

    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 提供了对线程安全的支持。

  • 相关阅读:
    hdu 5119 Happy Matt Friends
    hdu 5128 The E-pang Palace
    hdu 5131 Song Jiang's rank list
    hdu 5135 Little Zu Chongzhi's Triangles
    hdu 5137 How Many Maos Does the Guanxi Worth
    hdu 5122 K.Bro Sorting
    Human Gene Functions
    Palindrome(最长公共子序列)
    A Simple problem
    Alignment ( 最长上升(下降)子序列 )
  • 原文地址:https://www.cnblogs.com/xiekun96/p/14217971.html
Copyright © 2011-2022 走看看