静态内部类 单例设计模式举例

单例设计模式可以用静态内部类实现,下面解释它的优点和原因。

  1. 懒加载
    创建方式是用内部静态类中的一个静态方法返回实例对象。在不使用的时候这个单例是不会存在的。这个就和懒汉式是一样的。
  2. 线程安全
    如果有多个线程同时创建实例,根据类加载的机制,多线程初始化一个类,JVM能保证只有一个线程执行初始化方法,其他线程进入阻塞状态。
  3. 但是它能被反射来重复构造对象。

从静态内部类能复习类初始化时的顺序,先父类静态代码块 子类静态代码块 父类构造函数 子类构造函数。

public class Solution {
    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Singleton3 instance = Singleton3.getInstance();

}
class Singleton3 implements Serializable{
    private static class lazyLoader{
        static {
            System.out.println("加载了静态内部类");
        }
        private static final Singleton3 s = new Singleton3();
    }
    private Singleton3(){
        System.out.println("构造函数");
    }
    static {
        System.out.println("先加载谁");
    }
    public static Singleton3 getInstance(){
        System.out.println("getInstance方法");
        return lazyLoader.s;
    }
}

先初始化SingleTon3类,所以先输出SingleTon3的静态代码块。SingleTon3已经可以用了,现在运行到他的静态方法getInstance,输出getInstance方法。 现在用到静态内部类lazyLoader,开始初始化该类,输出“加载了静态内部类”,最后创建SingleTon3的实例,用到构造方法。
输出:
先加载谁
getInstance方法
加载了静态内部类
构造函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值