关键字:static

news2024/9/21 2:42:21

文章目录

  • 一、static关键字的使用
    • static修饰属性
      • 实例变量
      • 静态变量(类变量)
      • 内存解析
    • static修饰方法
    • static注意点
    • 如何确定什么时候使用static?
      • 方法
      • 属性
    • 单例设计模式
      • 饿汉式
      • 懒汉式
      • 区分饿汉式和懒汉式

一、static关键字的使用

1、可以用来修饰:属性、方法、代码块、内部类

static修饰属性

static修饰属性:静态变量(类变量)
属性,按是否有static修饰,分为:静态属性 vs 非静态属性(实例变量)

实例变量

实例变量:我们创建了类的多个对象,每个对象都独立拥有一套类中的非静态属性。当修改其中一个对象的非静态属性时,其他对象的属性值不会被修改。

静态变量(类变量)

静态变量:我们创建了类的多个对象,多个对象共享一个静态变量。当修改其中一个对象的静态变量时,其他对象调用的属性值是修改后的。
【说明】
①静态变量随着类的加载而加载。可以通过类.静态变量的方式调用(在没有创建属性时)
②因为类早于对象的创建,所以静态变量早于对象创建
③由于类只会加载一次,所以静态变量在内存中只存在一份:存在方法区的静态域中。

内存解析

栈:局部变量
堆:new出来的结构(对象、数组)
方法区:类的加载信息、静态域、常量池
在这里插入图片描述

static修饰方法

static修饰方法:静态方法
①随着类的加载而加载,可以通过 类.方法名 方式进行调用
②静态方法中,只能调用静态的方法或属性
非静态方法中,即可调用静态的方法或属性,也可调用非静态的方法或属性
(根据加载先后得到)

static注意点

在静态方法中,不能使用this或super,因为静态方法加载早于对象,这两个是基于对象的。

如何确定什么时候使用static?

方法

操作静态属性的方法通常设置为静态
工具类中的方法习惯上声明为静态,如Math

属性

属性可以被多个对象所共享的,不会随着对象不同而不同的。
类中的常量常常也声明为static,如Math.PI

单例设计模式

设计模式类似于套路
在这里插入图片描述

饿汉式

public class SingleTon1 {
	public static void main(String[] args) {
		Bank b=Bank.getInstance();
	}

}

//饿汉式
class Bank{
	//1.构造私有化构造器
	private Bank(){
		
	}
	//2.内部创建类的对象
	//4.要求此对象也是静态的
	private static Bank bank1=new Bank();
	//3.提供公共的静态的方法返回类的对象
	public static Bank getInstance(){
		return bank1;
	}
}

懒汉式

public class SingleTon2 {

	public static void main(String[] args) {
		Order o1=Order.getInstance();
		Order o2=Order.getInstance();
		System.out.println(o1==o2);
	}
}


class Order{
	//1.私有化类的构造器
	private Order(){
		
	}
	//2.声明当前类对象,没有初始化
	//4.此对象必须为static
	private static Order o=null;
	//3.声明public的,static的,返回当前类对象的方法
	public static Order getInstance(){
		if(o==null){
			o=new Order();
		}
		return o;
	}
}

区分饿汉式和懒汉式

饿汉式:
坏处——对象加载时间过长
好处——线程是安全的
懒汉式:
好处——延迟对象的创建
目前写法的坏处——线程不安全(后面可修复)

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

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

相关文章

回首满是自豪

写在前面hi朋友,我是几何心凉,感谢你能够点开这篇文章,看到这里我觉得我们是有缘分的,因着这份缘分,我希望你能够看完我的分享,因为下面的分享就是要汇报给你听的,这篇文章是在 2022 年 12 月 3…

【柔性数组与局部性原理】

柔性数组概念 柔性数组特点 局部性原理 柔性数组概念 对于柔性数组,也许你之前从未听说过,柔性数组,顾名思义,就是数组,它的柔性柔在元素个数可以动态变化, 即柔性数组是未知大小的,数组大小…

Elasticsearch:使用 Node.js 将实时数据提取到 Elasticsearch 中(二)

在我的上一篇文章 “Elasticsearch:使用 Node.js 将实时数据提取到 Elasticsearch 中(一)”,我详细描述了如何如何使用 Node.js 来采集地震数据。在今天的文章中,我们来详细描述如何对数据可视化。我们还将创建一个 we…

推荐七个Python效率工具!让你事半功倍

为了提高效率,我们在平时工作中常会用到一些Python的效率工具,Python作为比较老的编程语言,它可以实现日常工作的各种自动化。为了更便利的开发项目,这里给大家推荐几个Python的效率工具。 1、Pandas-用于数据分析 Pandas是一个强…

UEditorPlus v2.8.0发布 颜色自定义,文档功能完善

UEditor是由百度开发的所见即所得的开源富文本编辑器,基于MIT开源协议,该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器,主要做了样式的定制,更符…

vim使用教程图文教程(超详细)

1. 三种模式 vim编辑器有三种模式:命令模式、编辑模式、末行模式。 「命令模式」:可以进行删除、复制、粘贴等快捷操作。「编辑模式」:可以编辑文件内容。「末行模式」:可以通过命令操作文件,比如搜索、保存、退出等…

【C语言】字符串小练习(每日小细节012)

前言: 欢迎打开这篇博客,从今天开始,每天和大家分享一个C语言小细节,不久之后还会追加C 一些常常被忽视的小细节和思想统一的编程题目是这个专栏的核心哦 虽然简单但千万别在细节处失分!!!&…

【Linux编辑神器:vim】

目录 1. vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4. vim底行模式命令集 5. 简单vim配置 6 总结 什么是Vi/Vim? vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令&#xff0…

【算法】关于双指针的奇技淫巧(一):对撞指针

一、对撞指针 对撞指针由两个指针组成,分别指向数据的头部和尾部: 两个指针分别从两头移动,寻找符合答案的位置后停下。对撞指针主要应用于有序数组的求和,我们使用一个题目进行说明: 示例如下: 根据题目可…

元数据管理Datahub基本介绍和特点

目录1. 基本介绍2. 功能特色2.1 支持不同平台的元数据同步和搜索2.2 血缘关系2.3 查询数据集的统计信息2.4 实时治理2.5 Datahub的权限管理2.6 使用Domains、Glossary Terms、tags对数据Entity进行管理2.7 在Web界面对元数据进行管理1. 基本介绍 Datahub是现代数据栈的元数据管…

TypeScript(一)TypeScript下载安装,编译运行的三种方式:tsc命令行/webpack搭建环境/tsc-node库

什么是TypeScript? TypeScript是拥有类型的JavaScript超集,它可以编译成普通、干净、完整的JavaScript代码。 简单理解:TypeScript就是加强版的JavaScript TypeScript环境搭建 搭建前准备 TypeScript最终会被编译成JavaScript代码,那么我…

JavaSE笔记——函数式编程(类库)

文章目录前言一、基本类型二、重载解析三、FunctionalInterface四、默认方法五、Optional总结前言 前面知道了如何编写 Lambda 表达式,下面将详细阐述另一个重要方面:如何使用 Lambda 表达式。即使不需要编写像 Stream 这样重度使用函数式编程风格的类库…

find_package()的使用

find_package()命令是用来查找依赖包的,理想情况下,一句find_package()把一整个依赖包的头文件包含路径、库路径、库名字、版本号等情况都获取到,后续只管用就好了。但实际中往往CMake失败就是出在find_package()的失败上(这里不考…

朝花夕拾 - 2023 莽一年

Hello 2023,我来了~今年,又是一个怎样的楚门世界,我要如何在里面撒泼,期待~一 回收 2022 不及格答卷 回首 2022,那真的不堪回首,细节太多了,没做好没把握住~但是,不管 2022 过得怎样…

Qt6 中如何使用 qsb

【写在前面】 Qt 5 的图形体系结构非常依赖 OpenGL 作为底层 3D 图形 API。但过去 8 年来随着 Metal 和 Vulkan 的推出,市场发生了巨大变化。现在,Qt 6 加入了大量不同平台的图形 API,以确保用户可以在所有平台上以最高性能运行 Qt。 在 Qt Q…

【类和对象(完结)】

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit关键字 2. static成员 2.1 概念 2.2 特性 3. 友元 3.1 友元函数 3.2 友元类 4. 内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 7. 再次理解类和对象 8.总结 1. 再谈构造函数 1.1 构造函数体…

技术分享| 如何使用Prometheus实现系统进程监控

如何监控线上正在运营的系统?如何得知系统目前是正常还是异常? Prometheus是这么一套数据监控解决方案。它能让运维及开发人员随时掌控系统的运行状态,快速定位出现问题的位置,快速排除故障。只要按照 Prometheus的方式来做&#…

力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《258. 各位相加、263.丑数、268.丢失的数字》。 目录 25…

第三十五讲:神州无线局域网基础知识

1. IEEE 802.11协议 802.11无线标准家族包括802.11a/b/g/n/ac五个标准理论上可以提供高达每秒1Gbit的数据传输能力标准定义了如何使用免授权2.4 GHz 和 5GHz 频带的电磁波进行信号传输。 802.11无线标准家族 802.11a 802.11b 802.11g 802.11n 802.11ac 工作频段 5GHz 2…

内存访问为什么要分段?

内存分段是处理器为访问内存而设计的机制,称为内存分段机制。 简单的内存知识 内存结构(连续且地址依次升高) 访问方式 内存是随机读写设备,即访问其内部任何处,不需要从头开始找,只要直接给出其地址便可。…