浅谈singleton单例模式
一、前言 单例模式比较简单,可以说没有复杂的调用和接口的设计,就是一个简单的类,只是要求这个类只生成一个对象,无论什么时候都要保证这一点,因此只能生成一个实例的模式就是单例模式。 二、类的加载 类的加载是通过类加载器(Classloader)完成的,它既可以是饿汉式加载类,也可以是懒汉式加载,这跟不同的JVM实现有关。加载完类后,类的初始化就会发生,如果是对一个类的主动使用就会初始化对象,对类的被动使用不会对类进行初始化,比如final修饰的静态变量如果能在编译时就确定变量的取值,会被当做常量,作为对一个类的被动使用不会导致类的初始化。以下情况类被初始化: 类初始化的一些规则: 类从顶到底的顺序初始化,所以声明在顶部的字段遭遇底部的字段初始化; 超类早于子类和衍生类的初始化; 如果类的初始化是由于访问静态域而触发,那么只能声明静态域的类才被初始化,而不会触发超类的初始化或者子类的初始化,即使静态域被子类或子接口或者它的实现类锁引用; 接口初始化不会导致父接口的初始化; 静态域的初始化时在类的静态初始化期间,非静态域的初始化是在类的实例创建期间,这意味着静态域初始化在非静态域之前; 非静态域通过构造器初始化,子类在做任何初始化之前构造器会先调用父类的构造器,它保证了父类非静态或实例变量初始化早于子类; 三、单例模式的特点 单例模式有以下特点: 单例类只能有一个实例。