当前位置: 首页 > news >正文

单例模式 饿汉式(静态语句块)

/*** 单例模式* 饿汉式  方式2 静态代码块* 缺点:实例instance随类的加载而被创建,一直不用会造成内存浪费。*/
public class SingletonEager {// 1、私有化构造方法private SingletonEager(){}// 2、声明一个对象private static SingletonEager inatance;// 在静态代码块中创建对象static {inatance = new SingletonEager();}// 3、对外提供静态方法获取唯一实例public static SingletonEager getInstance() {return inatance;}
}

下面详细拆解 static 在这里的三个作用,以及为什么它能保证对象唯一。

一、 static 关键字的三个关键作用

在代码中,static 用在了三个地方,它们共同协作完成了单例逻辑:

1. 静态变量 (static SingletonEager instance)

  • 作用: 将变量归属于类(Class),而不是归属于某个具体的对象。
  • 结果: 无论这个类被后面用到了多少次,内存中只有一份 instance 变量。它存储在方法区(Method Area)或元空间中,被所有对象共享。

2. 静态代码块 (static { ... })

  • 作用: 用于类的初始化。
  • 触发时机: 当 JVM(Java 虚拟机)第一次加载这个类的时候执行。
  • 次数: 在整个程序的生命周期内,类只会被加载一次,所以静态代码块只执行一次
  • 结果: instance = new SingletonEager(); 这行代码只跑了一次,所以对象只创建了一个。

3. 静态方法 (static SingletonEager getInstance())

  • 作用: 允许在不创建对象的情况下直接调用方法。
  • 原因: 如果不是 static 方法,想调用 getInstance() 就必须先 new SingletonEager(),但这陷入了死循环(因为构造方法是私有的,外部无法 new)。
  • 用法: 变成了通过类名直接调用:SingletonEager.getInstance()

二、 为什么只会创建一个对象?(核心逻辑)

这主要归功于 Java 的类加载机制访问控制

可以把过程想象成一个严密的关卡:

  1. 第一道关卡:私有构造方法 (private SingletonEager())
  • 这堵死了外部的路。除了 SingletonEager 自己内部,谁都不能通过 new SingletonEager() 来创建新对象。
  1. 第二道关卡:类加载机制 (Class Loading)
  • 当程序第一次用到 SingletonEager 类时(比如调用 getInstance()),JVM 会加载这个类。
  • 关键点:JVM 保证一个类只会被加载一次。
  1. 第三道关卡:静态代码块执行
  • 类加载时,JVM 自动执行 static { ... } 代码块。
  • 代码块里执行了 new SingletonEager()
  • 因为类加载只有一次,所以这个 new 动作也只有一次。

总结流程:
程序启动 -> 第一次调用 SingletonEager.getInstance() -> JVM 加载类 -> 执行静态块(创建了唯一的那个对象) -> 赋值给 static 变量 -> 返回该对象。

第二次调用 getInstance() -> 类已经加载过了 -> 直接返回 static 变量里的那个对象(不会再 new 了)。


http://www.jsqmd.com/news/314057/

相关文章:

  • 计算机毕设Java家庭财务管理系统 基于Java的家庭财务智能管理系统设计与实现 Java驱动的家庭财务综合管理平台开发
  • 计算机毕设Java建筑碳排放计算系统 基于Java的建筑全生命周期碳排放管理平台 Java架构下的建筑碳排放综合计算与管理系统
  • python租房大数据分析可视化系统 机器学习 K-means聚类算法 线性回归预测算法 机器学习 链家租房网 Django框架 scrapy 爬虫
  • 听音乐网址
  • 机器学习:python二手房大数据分析系统 可视化 Scrapy 爬虫 链家二手房数据 Django框架 基于用户的协同过滤推荐 二手房推荐系统 (源码)✅
  • 大数据领域 OLAP 的数据可视化工具选择
  • Day02-12.开发接口功能-分析登录用户传递流程13:16
  • AI大模型:python汽车大数据分析可视化系统 机器学习 协同过滤推荐算法 二手车推荐系统 汽车推荐系统 爬虫技术
  • 视频编解码与 GOP 结构详解
  • Python全栈项目--基于机器学习的垃圾邮件过滤系统
  • 高新技术产品认证核心指南
  • AI大模型机器学习:Python汽车推荐系统 数据分析 可视化 协同过滤推荐算法 汽车租赁 Django框架 大数据 新能源汽车 毕业设计
  • 【爆肝】传统RAG已凉?图数据库让大模型准确率飙升95%,小白也能秒变AI大神!
  • 程序员必看!AI大模型算力暗战:腾讯阿里字节跳动背后的8家技术支撑企业,让你的AI开发不再缺算力!
  • 炸裂!国产Kimi K2.5多模态大模型开源,代码生成、界面设计一键搞定,小白程序员也能秒变大神!
  • 基于Python的智能房价分析与预测系统(源码+lw+部署文档+讲解等)
  • 基于Python爬虫的网络小说热度分析(源码+lw+部署文档+讲解等)
  • 一阶IIR低通滤波器:从原理到嵌入式实战
  • 布谷鸟科技携AI边缘计算产品线亮相韩国ROSCon KOREA 2026
  • (新卷,100分)- 5键键盘(Java JS Python)
  • (新卷,100分)- 单词接龙(Java JS Python)
  • 吐血推荐研究生必用的10款AI论文工具
  • 宇树机器狗GO2在gazebo驱动仿真
  • 亲测好用10个AI论文网站,助你轻松搞定本科毕业论文!
  • gazebo仿真环境启动velodyne雷达
  • 信号处理仿真:信号处理基础_(3).模拟信号与数字信号转换
  • Thinkphp和Laravel学生宿舍管理系统功能多 echart统计可视化120wq-_
  • 今日,DeepSeek再次“拆掉重做”,开源架构炸场:OCR 2只是起点,这次要重构AI的“眼睛”和“大脑”?
  • 影悦电影推荐系统
  • 基于STM32单片机设计的智能坐垫_431