从源码学习static的使用

news2025/1/19 20:39:23

从源码学习static的使用

前言

​ static意味静态的,在Java中,主要用来修饰类级别的变量或方法等,被修饰的内容,表示随着类的加载而加载,而不是具体的实例级别。

​ 具体到static的使用场景,主要有以下用途:静态变量、静态方法、静态代码块和静态内部类。

静态变量

​ 使用static关键字声明的变量称为静态变量(类变量),它们属于类而不是实例。所有的实例将共享同一个静态变量的值

​ 静态变量在源码中使用较为常见,通常用来修饰不变的静态常量。

在这里插入图片描述

比如Math类中的静态常态常量自然数E和圆周率PI,他们就被static修饰,可以直接通过类名来调用该静态常量;

静态方法

​ 使用static关键字声明的方法称为静态方法,可以通过类名直接调用,无需实例化对象

在这里插入图片描述

还是Math类的源码中,sin和cos方法被修饰为static的,在使用时,可以直接通过类名调用该方法,而无需再调用前实例化对象;

静态代码块

​ 使用static关键字声明的代码块称为静态代码块,它在类加载时执行,用于初始化静态变量或执行其他静态操作

在这里插入图片描述

如上述URLEncoder类,其定义了静态变量dontNeedEncoding,然后在静态代码块中对它进行了初始化等相关操作。

当然,除了操作静态变量外,也可以调用静态方法,进行一些处理。如下图中的DriverManager类,在静态代码块中,调用静态方法loadInitialDrivers进行一些初始化的操作:

在这里插入图片描述

静态内部类

​ 静态内部类是嵌套在另一个类中的类,使用static关键字声明,可以直接通过外部类名访问静态内部类。

​ 静态内部类与非静态内部类的区别在于,静态内部类不持有对外部类对象的引用,可以直接通过外部类名访问。静态内部类可以像普通类一样被实例化和访问,不依赖外部类的实例。

静态内部类的主要作用包括:

  1. 封装性:静态内部类可以将与外部类相关的类逻辑进行封装,使代码更加清晰和模块化。
  2. 隔离性:静态内部类与外部类解耦,不依赖于外部类的实例,可以独立存在,提高代码的灵活性和可维护性。
  3. 命名空间:静态内部类可以有效避免命名冲突,提供了更好的命名空间控制。

在这里插入图片描述

例如DriverManager类中有一个静态内部类DriverInfo,用于保存数据库驱动程序的信息。使用静态内部类的方式可以更好地组织代码结构,提高代码的可读性和可维护性。

static的使用场景

​ 通过上述实例,我们大概知道了static在修饰变量、方法、代码块和内部类时,如何使用。

​ 那具体到场景,我们应该什么时候考虑使用static呢,以下是一些可参考的建议:

  • 当需要表示类级别的常量或共享数据时,可以使用静态变量。
  • 方法与类的实例状态无关,仅与类本身相关时,可以使用静态方法。
  • 当需要在类加载时执行一次性的初始化操作时,可以使用静态代码块。
  • 当需要封装与外部类相关的逻辑且不依赖外部类实例时,可以使用静态内部类。
  • 静态工具类。静态工具类通常包含一些静态方法,用于提供通用的功能或工具方法。这些静态方法可以直接通过类名调用,无需实例化对象。

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

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

相关文章

vue3(vite)+electron打包踩坑记录(1)

vue3(vite)electron打包踩坑记录 - 打包vue 第一步 编译vue 使用vite构建vue,package.json如下 {"name": "central-manager","private": true,"version": "0.0.0","type": "commonjs",&q…

第2.5章 StarRocks表设计——行列混存表

注:本篇文章阐述的是StarRocks- 3.2.3版本的行列混存表 一、概述 1.1 背景 StarRocks 基于列存格式引擎构建,在高并发场景,用户希望从系统中获取整行数据。当表宽时,列存格式将放大随机IO和读写。自3.2.3开始,StarRo…

让C语言代码变抽象(其三)

目录 前言: 我们直接看代码 前言: 今天我在写判断语句代码的时候,又想到一个更抽象的代码。 今天我将要将我之前写的抽象遍历代码变得更抽象。 我们直接看代码 这里我们用到的是布尔,当条件为假时值为0; 所以我们这…

力扣随笔之移除元素(简单27)

思路:定义一个指针left,使该指针及该指针左边的数全部都不等于val,定义一个遍历指针i,若nums[i] val,则i自加,若nums[i] ! val,则将left,并将nums[i]的值赋给nums[left]&#xff0c…

后端程序员入门react笔记——react的diff算法(三)

diffing算法 虚拟dom 我们知道,react里面操作的都是虚拟dom,最后经过render渲染为真正的dom,那么为什么要提出虚拟dom这个概念呢?其实就是将逻辑和视图区分开,react的虚拟dom,就相当于mvc的c,…

设计推特(Leetcode355)

例题: https://leetcode.cn/problems/design-twitter/ 分析: 推特其实类似于微博,在微博中可以发送文章。 求解这类题目,我们需要根据题目需求,利用面向对象的思想,先对需求做一个抽象,看看能…

自定义 Git Hook

前言 前端同学大概都熟悉 husky 这个工具,他可以直接在项目中添加 git hooks,主要解决了 git hooks 不会同步到 git 仓库的问题,保证了每个开发人员的本地仓库都能执行相同的 git hooks。 但是 husky 毕竟是一个 JS 生态的工具,…

ChatGPT助您提升求职技能

目录 ChatGPT可以作为求职技能的学习和提升平台 ChatGPT可以帮助求职者提升沟通和表达能力 ChatGPT还可以帮助求职者提升问题解决能力和创新能力 ChatGPT还可以帮助求职者建立自信心和自我推销能力 随着科技的迅速发展,人们的生活方式和工作方式也在不断地变革。…

移动端自动化常用的元素定位工具 介绍

在移动端自动化测试和开发中,元素定位是非常关键的一步。以下是一些常用的工具和技术来帮助开发者或测试工程师在移动设备上定位元素: 1. **UiAutomator**: - **UiAutomator** 是 Android 官方提供的自动化测试框架。它可以用来编写测试脚本&…

交易快讯:4拼域名以10,000元被秒

交易新闻 ——30万美元易手,60万美元易手,.au 10万美元易主。 近期,域名交易金额可能达到130万美元(逾130万元人民币)。 ——双拼在域名交易平台上以2万元的固定价格进行交易。 该域名直接对应了南瓜的含义。 另外&a…

CSRF靶场实战

DVWA靶场链接&#xff1a;https://pan.baidu.com/s/1eUlPyB-gjiZwI0wsNW_Vkw?pwd0b52 提取码&#xff1a;0b52 DVWA Low 级别打开靶场&#xff0c;修改密码 复制上面的 url&#xff0c;写个简单的 html 文件 <html <body> <a hrefhttp://127.0.0.1/DVWA/vulne…

常见的排序算法整理

1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始&#xff0c;然后依次和剩余的元素进行比较&#xff0c;若小于相邻元素&#xff0c;则交换两者位置&#xff0c;同时将较大元素作为下一个比较的基准元素&#xff0c;继续将该元素与其相邻的元素进行比…

企业型多域名SSL证书

多域名SSL证书是目前市场上用的比较多的一种&#xff0c;主要解决多个不同规则的域名申请&#xff0c;但不适合主域名&#xff08;根域名&#xff09;相同的域名&#xff0c;因为这种域名直接申请通配符。 企业型其实就是OV类型或者EV类型&#xff0c;由于在CA/B产品名称规范中…

day13_String字符串的使用-课后练习 - 参考答案

文章目录 day13_课后练习代码编程题第1题第2题第3题第4题第5题第6题第7题第8题第9题第10题第11题第12题第13题 代码阅读题第14题第15题第16题第17题第18题第19题第20题 day13_课后练习 代码编程题 第1题 反转键盘录入的字符串。代码实现&#xff0c;参考效果如图所示&#x…

孙艺洲驾考再传捷报,科目二通过。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 在《飞驰人生2》的首映礼盛大举行的日子里&#xff0c;猴哥意…

基于ZYNQ的PCIE高速数据采集卡的设计(五)上位机软件设计

4.4 上位机软件设计 上位机主要完成数据的接收和保存文件等功能。由于采集卡是一种 PCIE 设备&#xff0c; 需要一种 PCIE 设备的驱动程序为基础进行开发。本设计选择 WinDriver 开发工具来 生成 PCIE 设备驱动和函数库&#xff0c;并基于该驱动在 Visual Studio(…

标准化特征数据:优化梯度下降计算

目录 前言1 特征数据的缩放2 均值归一化3 Z-Score 归一化结语 前言 在机器学习和深度学习中&#xff0c;特征的大小和参数的大小对模型的训练效果起着至关重要的作用。特别是在涉及多个特征的情况下&#xff0c;不同特征之间可能存在较大的差异&#xff0c;这会对梯度下降的计…

算法沉淀——动态规划之简单多状态 dp 问题(上)(leetcode真题剖析)

算法沉淀——动态规划之简单多状态 dp 问题上 01.按摩师02.打家劫舍 II03.删除并获得点数04.粉刷房子 01.按摩师 题目链接&#xff1a;https://leetcode.cn/problems/the-masseuse-lcci/ 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在…

软件工程复习笔记

一、软件工程概述 软件 = 程序 + 数据 + 相关文档 软件危机(Software Crisis) 指由于落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。 软件工程三要素 方法、工具、过程 软件工程目标 在给定成本、进度的…

【Linux】 yum命令使用

yum命令 yum&#xff08; Yellow dog Updater, Modified&#xff09; 是一个在 Fedora、CentOS 及其它一些基于 RPM 的 Linux 发行版中使用的包管理器。它允许用户自动安装、更新、配置和删除软件包。yum 由 Python 写成&#xff0c;基于 RPM&#xff08;Red Hat Package Mana…