Java单例模式


  • 背景知识:Static关键字

  • 在对于定义类的变量,分为两种,是否具有static修饰的变量;

    • 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量
    • 使用static修饰的变量称之为类变量(也称之静态变量),类变量不通过类的实例化来引用,可类名直接引用;
  • 二者区别:

    • 实例变量: JVM为每个新创建的对象分配独立的内存空间;
    • 类变量: 是所有对象共有的;
  • 引用方式:

    • 实例变量: 对象名.变量名
    • 类变量: 类名.变量名
  • 使用类变量的优点:减少开辟新的内存空间,直接引用固有变量。

  • 本概念也可以引入至实例方法和类方法;


  • 定义:该类只有一个实例,并且自行实例化向整个系统提供该实例;(由如一个国家只有一个皇帝,并只能指定某个人为皇帝);

  • 单例模式是应用最广泛的模式之一:

  • 作用:单例模式可以避免系统创建过多对象,从而减少过多资源消耗;

  • 适用场景

    1. 该系统资源只具有该类一个实例化对象:例如改家公司只具有一个打印机;
    2. 创建一个对象,需消耗的资源过多的情况下,可以使用单例模式。(例:访问IO和数据库连接池建立);
  • 注意点:

    • 构造方法不对外开放,一般为Private;
    • 单例模式的构造函数私有化,使得客户端代码无法以New 的方式实例化该类对象,只会暴露一个公有化静态方法;
例:
Person person = new Person();
Connection connection = DruidUtils.getConnection();

案例参考


懒汉模式

  • 特点:当使用时才进行实例化,采用以时间换空间的方式;
  • 优点:一定程度上节约资源;
  • 缺点:第一次加载时才进行实例化,反应慢;

饿汉模式

  • 特点:调用时,即进行类的实例化,采用以空间换时间的方式;

代码参考:将单例模式与计算正方形面积结合在一起;

  • AreaHunger:
package singleinstance;public class AreaHunger {// Create an instance directly.private static AreaHunger instance = new AreaHunger();// Private constructor. Can't visit it from outside's class.private AreaHunger() {}// Return an instance directly.public static AreaHunger getInstance() {return instance;}// Caculate the square area.public static UserTest getHunger(int x) {System.out.println("The square area are  " + (x*x));return null;}}
  • AreaLazy
package singleinstance;public class AreaLazy {// In inner to create an instance.private static AreaLazy instance = null;// Private constructor. Can't visit it from outside's class.private AreaLazy() {}// Provide a public static method to visit from outside.public static AreaLazy getInstance() {if(instance == null) {return new AreaLazy();}return new AreaLazy();}// Caculate the square's area.public static UserTest getSquareArea(int x) {System.out.println("The square are are " + (x*x));return null;}}
  • UserTest(用于测试)
public class UserTest {public static void main(String[] args) {// TODO Auto-generated method stubUserTest manOne = AreaLazy.getSquareArea(4);UserTest manTwo = AreaHunger.getHunger(8);}}
  • Console:(控制台运行结果)
The square are are 16The square area are  64

Java单例模式个人总结(实例变量和类变量)相关推荐

  1. java实例变量成员变量_Java的类成员变量、实例变量、类变量,成员方法、实例方法、类方法...

    总是被这些相似的概念搞晕,查阅了资料后做个小总结,以变量为例,方法辨析类似. 1.多胞胎名字汇总辨析 成员变量和成员方法是范围最大的定义,提到成员变量就可以理解成你所定义在一个类体中的各类变量的统称, ...

  2. 实例变量和类变量、实例方法类方法区别

    实例变量 实例变量声明在一个类中,但在方法.构造方法和语句块之外: 当一个对象被实例化之后,每个实例变量的值就跟着确定: 实例变量在对象创建的时候创建,在对象被销毁的时候销毁: 实例变量的值应该至少被 ...

  3. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

  4. 实例变量和类变量、类方法和实例方法

    类体中包括成员变量和局部变量,而成员变量又可以细分为实例变量和类变量,在声明成员变量的时候,用static给予修饰的称作类变量,否则称作实例变量.(类变量也称为static变量,静态变量) 那么,类变 ...

  5. java 实例变量和类变量

    当JAVA程序执行时,类的字节码文件就被加载到内存,如果该类没有创建对象,类的实例成员变量不会被分配内存,但是类中的类变量在类被加载到内存的时候,就分配了相应的内存空间.如果该类创建对象,那么不同的实 ...

  6. java实例变量,局部变量,类变量和final变量

    题目 答案:B 解析 实例变量: 定义在类中的变量是类的成员变量,可以不进行初始化, java 会自动进行初始化.(如果是引用类默认初始化为 null, 如果是基本类型,默认初始化为 0 ) 局部变量 ...

  7. java 实例变量是类的成员变量吗_JAVA中成员变量,局部变量,实例变量,类变量,有什么关系,,?...

    展开全部 java易混淆概念之类变量32313133353236313431303231363533e4b893e5b19e31333365643662.实例变量.局部变量 类变量.实例变量.局部变量 ...

  8. python中静态方法可以访问对象变量_python 面向对象-实例变量、类变量、实例方法、类方法、静态方法...

    需要搞清楚的是, 实例方法与类方法是什么?类变量和实例变量又是什么? 类方法中如何访问类变量.类方法要如何调用?当然 实例方法中如何访问类变量?能 实例方法访问实例变量,实例方法如何被调用?当然 类方 ...

  9. Java多线程编程系列-实例变量和线程安全

    导语   上面说到了多线程的简单实现,编写了几个入门的小例子,这里我们来研究一下关于实例变量和线程安全的问题.在自定义的线程类中的实例变量针对其他线程可以有共享和不共享之分,下多个线程之间进行交互的时 ...

最新文章

  1. DevExpress GridControl使用(二)
  2. python待遇如何-Python薪资待遇到底是多少?老男孩python学习
  3. 递归优化的这三种方式你知道吗?
  4. 已知两点坐标拾取怎么操作_已知的操作员学习-第4部分
  5. xgboost实例_XGBoost超详细推导,终于有人讲明白了!
  6. pip安装OpenCV
  7. html动态图标代码,SVG动态图标是如何实现的
  8. CSS环绕球体的旋转文字-3D效果
  9. vim 显示/取消行号
  10. python常用的几种字符串替换函数strip、replace、sub
  11. SQL Server 卸载重装
  12. 病毒库的备份及***隐藏地址
  13. sip软电话免费下载地址(eyebeam)
  14. WPS Office Pro v10.8.2.6726 绿色便携专业增强版
  15. rcreg amp 0x01 c语言,单片机课程设计-基于PIC单片机室内温度检测.doc
  16. linux制作U盘win10启动盘
  17. Mysql修改数据库名
  18. 驱动器开发:开源库汇总
  19. oracle表启用online,Oracle 表空间联机(online)与脱机(offline)
  20. php 中文转拼音 开头大写(附中文转首字母大写/全拼小写)

热门文章

  1. 2022-2028年中国绿冻石行业市场研究及前瞻分析报告
  2. 2022-2028年中国小球产业深度调研及投资前景预测报告(全卷)
  3. Go 学习笔记(76)— Go 标准库 net/http 创建客户端(发送 GET、POST 请求)
  4. vim中tab键8空格换4空格
  5. debian10 dhcp简单配置
  6. matplotlib交互模式
  7. openpyxl.utils.exceptions.IllegalCharacterError错误
  8. bert速度提升fastbert
  9. Intellij IDEA 添加jar包
  10. tf.shape()