static关键字与单例模式

可以修饰属性变量,方法和代码段

  • static修饰的属性称为静态属性或类属性, 在类加载时就在方法区为属性开辟存储空间,无论创建多少个对象,静态属性在内存中只有一份。

    可以使用 类名.静态属性 的方式引用

  • static修饰的方法称为静态方法或类方法,在类加载时就在方法区中开辟存储空间,存储方法中信息,在调用静态方法时,不会默认传递this参数。static修饰的属性和方法会在类加载的时候在内存中开辟空间

    可以使用 类名.方法() 的方式引用

  • static修饰的代码段称为静态代码段,在类加载时就自动执行,且仅执行一次。

    一般初始化操作可以写在静态代码段中。

1.1 对象属性与静态属性

class A{int i ;static int j ;
}class Test{main(){A a= new A();a.i = 10 ;A.j = 20 ;a.j = 20 ;}
}
  • 对象属性:只有创建对象,才能引用。

  • 静态属性:可以通过类名直接引用。不需要创建对象。 通过对象也可以引用。

    类加载时开辟存储空间, 只有一份, 可以数据共享。

1.2 对象方法与静态方法

特点1

无论是静态方法还是对象方法,都是在类加载的时候,就在方法区中分配了存储空间

无论创建多少个对象,方法在内存中只存储一次。

特点2

在使用上, 对象方法的使用,必须先创建对象,才能调用。

而静态方法,可以通过类名直接调用

特点3

尽然对象方法在内存中只有1份,怎么做到不同对象调用,可以访问不同对象的属性呢?

  • 当通过对象调用对象方法时,会默认传递一个参数,这个实参就是当前对象的地址。这个形参就是this

  • 当通过类调用类方法时,就不会传递对象地址(此时没有对象),静态方法也没有this这个默认参数

简单来说,对象方法和静态方法的区别就在于是否需要引用对象自己的属性变量。

 

扩展1

静态方法中,不能使用this关键字。(压根就没有)

静态方法中只能直接使用静态成员(属性和方法),不能直接使用非静态成员。

在对象方法中,可以使用对象成员,也可以使用静态成员。

扩展2

对象方法中会有一个默认的参数叫this,存储的是调用当前方法的那个对象的地址

所以可以通过this,访问指定对象的属性。

默认情况下,访问对象的属性和其他方法时,jvm会自动的根据this的地址访问,而不需要编码时必须使用this关键字

class A{int i  ;public void t1(){i = 20 ; //等价于 this.i = 20 ;}
}

 

什么情况下必须写this呢?

  1. 局部变量与属性变量同名时,默认引用的是局部变量

  2. 调用重载的构造方法的时候

扩展3

方法到底是如何起作用的,以及有与属性同名的变量和没有同名变量的引用过程

1.3 对象代码段和静态代码段

什么是代码段?

  • 就是个{} 里面包含一堆代码

  • 代码段可以写在方法中 , 也可以写在方法外

  • 代码段可以方法中和方法外独立存在,也可以配合着 分支结构和循环结构存在

class A{{.....}public void t1(){{.....}}public void t2(){if(){System.out.println()System.out.println()System.out.println()System.out.println()}while(){}}}

 

方法外的代码段

  • 写在方法外,但要写在类里。

  • 可以是普通的代码段,也可以是增加了static关键字修饰的代码段

  • 前者就称为对象代码段(普通代码段), 后者称为静态代码段

  • 对象代码段,在创建对象时,自动执行,每个对象的创建仅执行一次。

    如果创建多个对象,这个代码段就会被执行多次。

  • 静态代码段,在类加载时,自动执行,且仅执行一次

  • class A{{...}static{...}
    }

    扩展

    java类在编译时,会自动的提供两种初始化方法

  • <init> 对象的初始化方法 。 其内容来自于构造方法和对象代码段, 如果有构造方法重载的,就会有多个对象初始化方法

  • <clinit>类的初始化方法。没有专门的对应的方法,方法的内容就是静态代码段的内容。

 

2 单例模式

单例模式是一种设计模式

什么是设计模式?

  • 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结

设计模式主要分为3大类

  • 创建型 : 如何创建对象 , 例如单例模式,如何只创建一个对象。

  • 结构型 : 设计不同的执行结构,适合不同的执行场景。 暂不解释。

  • 行为型 : 与具体的行为操作有关,例如策略模式,如何根据不同的策略完成功能。

单例模式特点

  • 确保在jvm内存中,或在程序执行的过程中,某一个类只会产生一个对象。

  • 重点在于是否能想明白 为什么只需要对象创建一次,而不在于如何实现对象只创建一次。

单例模式的实现

  1. 需要构造方法私有化。 不再使用public修饰构造方法,改用private修饰构造方法

    private修饰的方法或者属性只有类自己可以使用。外部类不能使用。

  2. 定义一个属性,来存储类自身创建的对象

    类自身只创建一次

  3. 提供一个方法,外部使用者可以通过调用这个方法,获得刚刚存入属性中的那个对象

class D{private D(){}static D d = new D();public static D getD(){return d ;}//-----------------------//属性

 

    • 由于外部类调用这个方法的时候,还没拥有D对象, 所以只能通过类调用这个方法。

      所以这个方法应该是static方法

    • static方法中不能直接使用非静态的属性,

      所以d属性应该也是静态的

注意:

单例模式的设计与类对象应该具备哪些属性和方法无关。

扩展:懒汉式和饿汉式

  • 饿汉式的单例模式:在类加载时就完成对象的创建,并将其存入属性变量

    特点:空间换时间

class D{private D(){}static D d = new D();public static D getD(){return d ;}
}

懒汉式的单例模式:在类加载时先不创建对象, 第一次请求对象时再创建对象

特点:时间换空间

class D{private D(){}static D d ;public static D getD(){if(d == null){//还没有创建呢d = new D();}return d ;}}```

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA第 5 篇,FPGA技术优略势,FPGA学习方向,FPGA学习路线(FPGA专业知识的学习方向,FPGA现场可编程门阵列学习路线和方向)

前言 前几篇讲了一下FPGA的发展和应用&#xff0c;以及未来前景。具体详细&#xff0c;请看 FPGA发展和应用&#xff0c;以及未来前景https://blog.csdn.net/weixin_65793170/category_12665249.html 这里我们来&#xff0c;记录一下&#xff0c;FPGA专业知识的学习路线 一.…

第22周:调用Gensim库训练Word2Vec模型

目录 前言 一、Word2vec基本知识 1.1 Word2Vec是什么 1.2 Word2Vec两种主要模型架构 1.2.1 CBOW模型 1.2.2 Skip-gram模型 1.3 实例说明 1.4 调用方法 二、准备工作 2.1 安装Gensim库 2.2 对原始语料分词 2.2 添加自定义停用词 三、训练Word2Vec模型 四、模型应用…

快速掌握GPTEngineer:用AI创建网页应用的实用教程

今天来聊聊一个非常有趣的工具——GPTEngineer。这是一个基于AI的网页开发平台&#xff0c;特别适合那些不熟悉编程但又想快速创建网页应用的人。如果你想用简单的文本描述来生成一个网站或者应用&#xff0c;GPTEngineer可能就是你需要的。我们一步步看看如何使用它。 1. 了解…

Spring Boot 入门

1.1.1 什么是Spring Boot Spring Boot是一个开源的Java应用框架&#xff0c;由Pivotal团队提供&#xff0c;旨在简化Spring应用的初始搭建以及开发过程。‌ Spring Boot通过使用特定的配置方式&#xff0c;使得开发人员不再需要定义样板化的配置&#xff0c;从而在快速应用开发…

中仕公考:公务员考试缺考有影响吗?

公务员考试缺考的影响根据考试阶段的不同又所区别&#xff0c;中仕为大家介绍一下&#xff1a; 笔试阶段的缺考后果&#xff1a; 在公务员考试中&#xff0c;若考生未能按时参加笔试&#xff0c;将自动视为放弃该次考试机会。此行为不会对考生的个人信用产生任何负面效应&…

Win10 安装 Rabbitmq

参考文档&#xff1a;https://www.rabbitmq.com/docs/install-windows 一、安装 Erlang 语言 安装 RabbitMQ 需要该语言的支持才能安装 下载地址&#xff1a;https://erlang.org/download/otp_versions_tree.html 点击这里下载最新版本&#xff1a;27.0.1 直接默认 next 更…

【计算机网络】计算机网络的性能指标

1B/s 8bps &#xff0c;MB/s 8Mbps 信道&#xff08;Channel&#xff09;&#xff1a;表示向某一方向传送信息的通道&#xff08;信道≠通信线路&#xff09;&#xff0c;一条通信线路在逻辑上往往对应一条发送信道和一条接收信道。

数盟IOS端可信ID

一、基本情况介绍 数盟IOS端可信ID介绍页: 数字联盟 数盟号称是还原出原生的IDFA, 但是苹果官网这么介绍&#xff1a; 用户开启跟踪允许跟踪后&#xff0c;APP才可以请求获取IDFA&#xff0c;且用户交互界面允许后&#xff0c;APP才能获取到IDFA. 官网给出的基本架构&#xf…

Linux基础1-基本指令7(其他常用指令,shell简介)

目录 1.uname 2.常用小指令 3.查看系统信息的其他指令 4.shell命令及其原理 4.1这里我们简单了解一下shell 4.2 shell存在的意义&#xff1f; 1.uname 如何查看计算机体系架构&#xff1f; uname -a,查看详细信息 uname -r 查看简要信息 2.常用小指令 TAB&#x…

el-table自定义合并表格

前沿 &#xff1a; 为了更好的展示数据&#xff0c;很多地方用到表格合并&#xff0c;但是element文档里面没有好的合并方法&#xff0c;只能自定义合并表格来解决需求。于是乎&#xff0c;写了以下方法&#xff0c;方面以后拿来即用。 自定义合并表格 表格数据 tableData: [{i…

laravel8快速开发简单博客系统(二)

目录 一、创建文章增删改成提交的控制器 1、注释文章查看权限&#xff0c;非登录状态可以查看文章列表页 2、创建提交控制器post 3、创建数据表 4、创建提交post资源路由 5、创建post控制器view目录post 二、文章添加功能实现 1.模板显示 2.复制home.blade.php模板到po…

Xilinx FPGA在线升级——升级思路

一、绪论 网上很多文章都讲述了Xilinx FPGA在线升级即回退的优势&#xff0c;在这里仅简述一遍。优势在于可不拆机的情况下改变FPGA的功能&#xff0c;可进行产品迭代。回退的优势是避免升级过程中一些突发情况导致板卡成为废板。至少Golden里面包含了可进行升级的部分代码。 …

108页PPT分享:华为流程体系及实施方法最佳实践

PPT下载链接见文末~ 华为的流程体系、流程框架及实施方法是一个复杂而精细的系统&#xff0c;旨在确保公司运作的高效性和竞争力。以下是对这些方面的详细描述&#xff1a; 一、华为的流程体系 华为的流程体系是一套全面的管理体系&#xff0c;它涵盖了企业所有的活动&#…

【C++标准模版库】模拟实现容器适配器:stack、queue、priority_queue(优先级队列)

stack和queue 一.容器适配器1.什么是适配器 二.模拟实现stack和queue三.STL标准库中stack和queue的底层结构四.deque&#xff08;双端队列&#xff09;的简单介绍五.deque作为stack和queue的默认容器的原因六.priority_queue&#xff08;优先级队列&#xff09;的介绍和使用七.…

[线程]线程不安全问题 --- 内存可见性 及wait和notify

文章目录 一. 由内存可见性引起线程不安全问题的例子二. 分析内存可见性产生的原因三. volatile 关键字(面试题)四. 线程的等待通知机制waitnotify 一. 由内存可见性引起线程不安全问题的例子 public class Demo17 {private static int count 0;public static void main(Stri…

linux下基本指令(持续更新)

目录 1.adduser 2.passwd 3.userdel 4. su - 5.ls 6.pwd ​编辑 7.cd 8.touch 9.mkdir &#x1f680; 10. rmdir && rm &#x1f680; 11.whoami &#xff08;who am i) 12.clear 13.tree (需要安装 yum install -y tree) 14.who 这里我用的是腾讯…

#网络编程 笔记

认识网络 网络发展史 ARPnetA--->Internet--->移动互联网--->物联网 TCP 用来检测网络传输中差错的传输控制协议 UDP 用户数据报协议&#xff0c;专门负责对不同网络进行互联的互联网协议 局域网 实现小范围短距离网络通信 广域网 现大范围长距离网络通信…

Python编码系列—Python项目架构的艺术:最佳实践与实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

(一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)

ZSWatch是一个包括硬件、软件和3D打印外壳全部开源的智能手表&#xff0c;软件功能丰富&#xff0c;并可与手机互联用来接收信息和切换歌曲&#xff0c;开源协议为GPL-3.0。 因为ZSWatch建立在Zephyr™项目RTOS之上&#xff0c;因此得名ZSWatch- Zephyr&#xff0c;目前该项目…

HANA5 游戏逆向

前言 某著名百合R18游戏 以前尝试逆过一次&#xff0c;半途而废了。今天想起来再逆一下&#xff0c;记录下逆向的过程。 游戏文件结构&#xff1a; 游戏资源extract 主要目标是弄明白游戏资源&#xff1a;SE、CG这些怎么加载解密的。 还是像万华镜那样下三个API断点&…