Java Static关键字 单例设计模式

news2024/11/27 16:38:06

类变量

  • 类变量(静态变量):有static修饰,属于类,在计算机中只有一份,被类的所有对象共享

    • 可以通过类名访问,也可以通过对象名访问,但是推荐用类名访问
    • 类变量一般用public修饰,表示完全公开
  • 实例变量:无static修饰,每个对象中的实例变量均独立

    • 只能使用对象名访问

执行原理:

02、面向对象高级一:static修饰成员变量、类变量应用场景_哔哩哔哩_bilibili

类方法

  • 类方法(静态方法):有static修饰,属于类

    • 访问方式与访问类变量一致
  • 实例方法(对象的方法):无static修饰,属于对象

    • 访问方式与访问实例变量一致
注意事项

实例方法中既可以访问类成员,也可以访问实例成员。而类方法中只能访问类成员(类成员包括类方法和类变量),不能访问实例成员,也不能出现this关键字

  • 类方法中可以直接访问类的成员,不可以直接访问实例成员
    • 因为每个对象的实例成员值是不同的,如果在类方法中访问会无法识别是哪个对象的
  • 实例方法中即可以访问类成员,也可以访问实例成员
  • 实例方法中可以出现this关键字,类方法中不可以出现this关键字

使用类方法作为工具类会提高代码复用和开发效率,并且避免浪费内存

案例:一个页面需要四位验证码,一个界面需要六位验证码,写一个类方法,参数是验证码的位数。

代码块

静态代码块

  •     格式:static{}
  •     特点:类加载时自动执行,由于类只加载一次,静态代码也只执行一次
  •     作用:完成类的初始化,例如:对类变量的初始化赋值

实例代码块

  •     格式:{}
  •     特点:每次创建对象时,都会执行实例代码块,并在构造器前执行
  •     作用:和构造器一样,都是用来完成对象的初始化,例如:对实例变量进行初始化赋值(但是一般不用,因为没有意义)。也可以用于将有参构造器和无参构造器中的重复代码放入实例代码块中,减少重复代码

执行顺序:静态代码块-实例代码块-构造器
 

单例设计模式

    设计模式:解决某个问题的最优解法

    单例设计模式概念:确保一个类只有一个对象


    饿汉式单例设计模式

        **饿汉式单例设计模式特点:**在获取类的对象时,对象已经创建好了

        饿汉式单例设计模式写法:

  •             把类的构造器私有
  •             定义一个类变量记住类的一个对象
  •             定义一个类方法,返回对象
     
public class mjz {

//    定义一个类变量记住类的一个对象
    private static mjz instance = new mjz();
//    定义一个私有的构造函数
    private mjz() {

    }
//    定义一个类方法,返回类对象
    public static mjz getInstance() {
        return instance;
    }


    public static void main(String[] args) {
        mjz obj1 = mjz.getInstance();
        mjz obj2 = mjz.getInstance();
        mjz obj3 = mjz.getInstance();
        System.out.println(obj1==obj2);
        System.out.println(obj2==obj3);

    }

}

 

  • 饿汉式单例设计模式应用场景

    • Runtime
    • 任务管理器:永远只会产生同一个任务管理器窗口对象
  • 饿汉式单例设计模式好处

    • 避免浪费内存

懒汉式单例设计模式

  • **懒汉式单例设计模式特点:**拿对象时,才开始创建对象

  • 懒汉式单例设计模式写法

    • 将类的构造器私有

    • 定义一个类变量用于存储对象

    • 提供一个类方法,保证返回的是同一个对象

public class mtk {

    // 定义一个类变量用于存储对象
    private static mtk instance;
//    定义一个私有的构造函数
    private mtk() {

    }
//   定义一个类方法,保证返回的是同一个对象
    public static mtk getInstance() {
        if (instance == null) {
            instance = new mtk();
        }
        return instance;
    }

    public static void main(String[] args) {
        mtk obj1 = mtk.getInstance();
        mtk obj2 = mtk.getInstance();
        mtk obj3 = mtk.getInstance();
        System.out.println(obj1==obj2);
        System.out.println(obj2==obj3);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven 生命周期clean default size含义

clean 负责清理工作,清理上一次项目构建产生的一些文件,如编译后的字节码文件,打包后的jar包文件 default 整一个项目构建的核心工作,如编译,测试,打包,安装,部署等等 size 生成报告…

springBoot--web--函数式web

函数式web 前言场景给容器中放一个Bean&#xff1a;类型是 RouterFunction<ServerResponse>每个业务准备一个自己的handler使用集合的时候加注解请求的效果 前言 springmvc5.2 以后允许我们使用函数式的方式&#xff0c;定义web的请求处理流程 函数式接口 web请求处理的…

Docker开箱即用,开发码农加分项部署技术拿下!

目录 Docker概述 效果呈现 镜像 & 镜像仓库 & 容器 镜像 DockerHub 配置国内源加速 容器 简单的命令解读 Docker基础 常用命令 案例演示 数据卷 什么是数据卷 数据卷命令 演示环节 匿名数据卷 案例演示 自定义挂载位置 案例演示 自定义镜像 镜像结构 Dockerfile …

Python —— UI自动化之Page Object模式

1、Page Object模式简介 1、二层模型 Page Object Model&#xff08;页面对象模型&#xff09;, 或者也可称之为POM。在UI自动化测试广泛使用的一种分层设计 模式。核心是通过页面层封装所有的页面元素及操作&#xff0c;测试用例层通过调用页面层操作组装业务逻辑。 1、实战 …

Kafka简单入门01

目录 Kafka的核心组件 Kafka的分区有序 Kafka的多副本机制 Kafka的安装部署 Kafka的基本操作 Apache Kafka 是一个高吞吐量的分布式流数据平台&#xff0c;通常用于构建实时数据流处理应用程序。 Kafka的核心组件 主题&#xff08;Topic&#xff09;&#xff1a;主题是 K…

【vSphere 8 自签名 VMCA 证书】企业 CA 签名证书替换 vSphere VMCA CA 证书Ⅰ—— 生成 CSR

目录 替换拓扑图证书关系示意图说明 & 关联博文1. 默认证书截图2. 使用 certificate-manager 生成CSR2.1 创建存放CSR的目录2.2 记录PNID和IP2.3 生成CSR2.4 验证CSR 参考资料 替换拓扑图 证书关系示意图 本系列博文要实现的拓扑是 说明 & 关联博文 因为使用企业 …

为什么不建议使用Python自带的logging?

B站|公众号&#xff1a;啥都会一点的研究生 包括我在内的大多数人&#xff0c;当编写小型脚本时&#xff0c;习惯使用print来debug&#xff0c;肥肠方便&#xff0c;这没问题&#xff0c;但随着代码不断完善&#xff0c;日志功能一定是不可或缺的&#xff0c;极大程度方便问题…

【CSS】使用 CSS 实现一个宽高自适应的正方形

1. 利用 padding 或 vw <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><metaname"viewport"content"widthdevice-width, initial-scale1.0"><title>Document</title><st…

带你深入了解微信小程序【授权登录】

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《微信小程序 》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;…

FPGA的斐波那契数列Fibonacci设计verilog,代码和视频

名称&#xff1a;斐波那契数列Fibonacci设计verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 设计一个产生斐波那契数列&#xff08;也叫黄金分割数列&#xff09;的硬件电路: 斐波那契数列中每个数为其相邻前两个数的和:即FNFN1FN2,(数列…

Node学习笔记之包管理工具

一、概念介绍 1.1 包是什么 『包』英文单词是package &#xff0c;代表了一组特定功能的源码集合 1.2 包管理工具 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作 借助包管理工具&#xff0c;可…

windows系统如何查看Linux文件系统中的图片缩略图

背景 使用autoDL云算力资源&#xff0c;没有GUI界面&#xff0c;实验结果都是图片为主&#xff0c;为了可视化查看图片&#xff0c;所以萌生了是否有软件可以查看Linux文件系统中的图片缩略图。 目前网上有几种方法可以支持在windows系统上查看Linux文件系统中的图片缩略图&a…

逻辑漏洞详解

原理&#xff1a; 没有固定的概念&#xff0c;一般都是不符合常识的情况。比如任意用户注册&#xff0c;短信炸弹&#xff0c;占用资源&#xff0c;交易支付、密码修改、密码找回、越权修改、越权查询、突破限制。 根据实际业务逻辑进行比对&#xff0c;购物的可以根据数量&a…

【Spring Boot 源码学习】HttpEncodingAutoConfiguration 详解

Spring Boot 源码学习系列 HttpEncodingAutoConfiguration 详解 引言往期内容主要内容1. CharacterEncodingFilter2. HttpEncodingAutoConfiguration2.1 加载自动配置组件2.2 过滤自动配置组件2.2.1 涉及注解2.2.2 characterEncodingFilter 方法2.2.3 localeCharsetMappingsCus…

商品规格项数据的遍历以及添加

简介 今天在处理规格项的数据时遇到了一些问题&#xff0c;接下来就给大家分享一下 规格项数据设计 "specifications": [{"goodsSpecificationId": 6,"goodsSpecificationName": "网络类型","goodsTypeId": 24,"goods…

【Acwing166】数独(dfs+剪枝+位运算)

本题思路来源于acwing算法提高课 题目描述 看本文需要准备的知识 1.dfs算法基本思想 2.位运算基础 3.对剪枝这个名词的大概了解 剪枝优化位运算优化 常见四种剪枝策略 首先考虑这道题的搜索顺序&#xff0c;很明显&#xff0c;可以随意选择一个空格子&#xff0c;分支为这…

《广西开放大学电大搜题微信公众号——探索学习的新途径》

随着社会的发展&#xff0c;教育无疑成为了人们的基本需求之一。然而&#xff0c;对于许多忙碌的职场人士来说&#xff0c;时间和地点的限制使得他们无法像传统学生那样参加常规的大学教育。好在有着广西开放大学这样的学府&#xff0c;为那些繁忙而渴望知识更新的人们提供了学…

好消息,终于可以获取到支付宝【支付交易投诉】的信息了。。。

大家好&#xff0c;我是小悟 若我拿出这个系统&#xff0c;阁下又该如何应对。 1、问题背景 之前以为从账单详情页中点击【投诉】 > 【举报中心】的投诉信息获取不到&#xff0c;经过不断尝试&#xff0c;终于能获取到了。 【支付宝支付交易投诉】&#xff0c;投诉入口是…

​​​​​​​2022年上半年 软件设计师 上午试卷(1-32)

以下关于冯诺依曼计算机的叙述中&#xff0c;不正确的是 &#xff08;1&#xff09; 。 &#xff08;1&#xff09; A. 程序指令和数据都采用二进制表示 B. 程序指令总是存储在主存中&#xff0c;而数据则存储在高速缓存中 C. 程序的功能都由中央处理器&#xff08;CPU&…

深入解析docker内核网桥

今天做虚拟桌面&#xff0c;朋友问我&#xff0c;为什么vnc 连接另一个docker 容器一直超时&#xff0c;原因是在docker 启动的时候没有组网&#xff0c;那么接下来我就要解析下docker的内核网络。 我们思考几个问题&#xff0c;带你了解linux 中docker 网络实现的基本原理。 文…