深入理解Java中的static关键字及其内存原理
static是Java中实现类级共享资源的核心修饰符,它突破了对象实例化的限制,使得变量和方法能够直接与类本身绑定。这种特性让static成为构建工具类、全局配置等场景的利器,但同时也带来独特的内存管理机制需要开发者关注。
static修饰成员变量
1. 定义与特性
public class Config {// 静态变量(类变量)public static String ENV = "production";// 实例变量private int requestCount;
}
- 共享性:所有实例共享同一存储空间(
Config.ENV) - 生命周期:类加载时初始化,程序结束时销毁
- 存储位置:JDK8+存放在元空间(MetaSpace),旧版本在方法区
2. 内存原理图解

当创建多个对象时,static修饰的变量指向同一空间
static修饰成员方法
1. 定义规范
class MathUtils {public static int add(int a, int b) {return a + b;}
}
- 调用方式:推荐
类名.方法名()(如MathUtils.add(2,3)) - 访问限制:静态方法中无法使用this,不能直接访问实例成员
2. 设计考量
- 工具类设计:像
java.util.Collections这样的工具类大量使用静态方法 - 性能优化:避免不必要的对象创建(如单例模式的静态工厂方法)
静态代码块
class Database {static Connection conn;static {// 类加载时初始化连接池conn = DriverManager.getConnection(...);}
}
- 执行时机:类首次被加载时执行(JVM保证线程安全)
- 使用场景:初始化静态资源(配置文件加载、注册驱动等)
结语
深入理解static关键字需要把握其"类级别共享"的本质特征,同时要警惕滥用可能带来的内存问题和并发风险。结合JVM内存模型的学习,开发者可以更安全高效地运用这一特性,在系统设计时做出更合理的架构决策。
相关文章:
深入理解Java中的static关键字及其内存原理
static是Java中实现类级共享资源的核心修饰符,它突破了对象实例化的限制,使得变量和方法能够直接与类本身绑定。这种特性让static成为构建工具类、全局配置等场景的利器,但同时也带来独特的内存管理机制需要开发者关注。 static修饰成员变量…...
Nest.js全栈开发终极实践:TypeORM+微服务+Docker构建高可用企业级应用
文章目录 **第一部分:认识Nest.js与基础环境搭建****1.1 什么是Nest.js?****1.2 环境准备****1.3 创建第一个项目****1.4 启动开发服务器****1.5 核心文件解读** **第二部分:基础控制器与路由****2.1 控制器的作用****2.2 创建自定义控制器**…...
20250310-组件基础2
通过插槽来分配内容 一些情况下我们会希望能和 HTML 元素一样向组件中传递内容: <AlertBox>传入的内容 </AlertBox> 我们期望能渲染成这样: 这可以通过 Vue 的自定义 <slot> 元素来实现: <template><div clas…...
Fedora41安装MySQL8.4.4
Fedora41安装MySQL8.4.4 Fedora41用yum仓库安装MySQL8.4.4 笔记250310下载安装启动mysqld服务查看生成的初始密码 , 用初始密码登录登录后,必须修改初始密码才能执行其它操作可选设置降低密码强度要求, 使用简单密码降低 validate_password 组件对密码强度的要求 用SET GLOBAL命…...
基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
NLP常见任务专题介绍(2)-多项选择任务(MultipleChoice)训练与推理模板
一、 使用 BigBird 进行多项选择任务训练与推理 本示例展示如何使用 BigBirdForMultipleChoice 训练一个多项选择模型,适用于考试答题、阅读理解、常识推理等任务。 1️⃣ 任务描述 目标:给定一个问题和多个选项,模型预测正确答案。 数据格式:输入包含 (问题, 选项1, 选项…...
java BCC异或校验例子
需求 对一个十六进制的字符串进行BCC校验 方法 private static String XORCheck(String rawMsg) {// 16进制字符串需要转成10进制数组进行校验,然后再返回16进制字符串用于与原来的字符匹配byte[] bytes HexDumpMsgFormat.hexStr2DesBytes(rawMsg);return BytesUt…...
Python第十六课:深度学习入门 | 神经网络解密
🎯 本节目标 理解生物神经元与人工神经网络的映射关系掌握激活函数与损失函数的核心作用使用Keras构建手写数字识别模型可视化神经网络的训练过程掌握防止过拟合的基础策略一、神经网络基础(大脑的数字化仿生) 1. 神经元对比 生物神经元人工神经元树突接收信号输入层接收特…...
若依-导出后端解析
针对若依框架微服务版本学习 若依导入导出功能的具体使用详见:后台手册 | RuoYi 1.导出逻辑: 导出文件的逻辑是先创建一个临时文件,等待前端请求下载结束后马上删除这个临时文件。但是有些下载插件,例如迅雷(他们是二…...
华为OD机试九日集训第1期 - 按算法分类,由易到难,循序渐进,提升编程能力和解题技巧,从而提高机试通过率(Python/JS/C/C++)
目录 一、适合人群二、本期训练时间三、如何参加四、数据结构与算法大纲五、华为OD九日集训第1期第1天、逻辑分析第2天、数组第3天、双指针第4天、map与list第5天、队列第6天、栈第7天、滑动窗口第8天、二叉树第9天、矩阵 六、国内直接使用满血ChatGPT4o、o1、o3-mini-high、Cl…...
Python 机器学习小项目:手写数字识别(MNIST 数据集)
本项目将使用 scikit-learn 库,基于 支持向量机(SVM) 模型来构建一个手写数字识别系统。数据集选用 MNIST,其中包含 0-9 的手写数字图像,每张图片是 88 像素的灰度图。 项目步骤 安装必要的库加载数据集数据预处理划…...
STM32中输入/输出有无默认电平
结论: 输入从严格意义上来讲没有默认高低电平之说 推挽输出模式: 在推挽输出模式下,STM32的GPIO引脚可以输出高电平和低电平。如果没有通过软件明确设置引脚的电平状态,STM32的某些型号(或特定情况下)可能会…...
webshell一些上传心得
我们以upload-labs为基础 一、前端拦截: 如第一关 工作方式: 直接在前端拦截 绕过方式: 因为没有限制后端,所有可以用bs 绕过前端修改格式即可 将需要上传的php文件改成jpg格式 使用burp suite 拦截上传后,使用re…...
ROS实践(二)构建Gazebo机器人模型文件urdf
目录 一、基础语法 1. urdf文件组成 2. robot根标签 3. link 和 joint标签 4. sensor标签 二、 实验:使用launch文件启动rviz查看机器人模型 1. 编写机器人模型的urdf文件。 2. 编写launch文件。 3. 运行launch,查看效果。 URDF(Unifi…...
Linux 入门:常用命令速查手册
目录 一.指令 1.pwd(显示所在路径) 2.ls(列出所有子目录与文件) 3.touch(创建文件) 4.mkdir(创建目录) 5.cd(改变所处位置) 6.rm(删除&…...
kali linux web扫描工具
Kali Linux是一款专为网络安全领域而打造的操作系统,提供了众多优秀的安全工具,其中就包括了强大的web扫描工具。Web扫描是网络安全检测的一个重要环节,它可以帮助安全专家检测网站的漏洞,提升网站的安全性。 Kali Linux中集成了…...
2路模拟量同步输出卡、任意波形发生器卡—PCIe9100数据采集卡
品牌:阿尔泰科技 型号: PCIe9100、PCIe9101、PXIe9100、PXIe9101 产品系列:任意波形发生器 支持操作系统:XP、Win7、Win8、Win10 简要介绍: 910X 系列是阿尔泰科技公司推出的 PCIe、PXIe 总线的任意波形发生器&…...
Facebook 隐私保护技术的发展与未来趋势
Facebook 隐私保护技术的发展与未来趋势 在这个数字化时代,个人隐私保护已成为全球关注的焦点。Facebook,作为全球最大的社交网络平台之一,其在隐私保护技术的发展上扮演着重要角色。本文将探讨 Facebook 在隐私保护技术方面的进展ÿ…...
Android TCP封装工具类
TCP通信的封装,我们可以从以下几个方面进行改进: 线程池优化:使用更高效的线程池配置,避免频繁创建和销毁线程。 连接重试机制:在网络不稳定时,自动重试连接。 心跳机制:保持长连接ÿ…...
Python基于Django的医用耗材网上申领系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
Java虚拟机之垃圾收集(一)
目录 一、如何判定对象“生死”? 1. 引用计数算法(理论参考) 2. 可达性分析算法(JVM 实际使用) 3. 对象的“缓刑”机制 二、引用类型与回收策略 三、何时触发垃圾回收? 1. 分代回收策略 2. 手动触发…...
【mysql】mysql数据库,权限授予,账号设置
创建一个可用的数据库,名字为gitea,支持中文utf8mb4 CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 设置东八区时区 SET GLOBAL time_zone 08:00; FLUSH PRIVILEGES; # 查询当前时间 SELECT NOW();给【普通用户】授予查…...
Html5学习教程,从入门到精通, HTML5超链接应用的详细语法知识点和案例代码(18)
HTML5超链接应用的详细语法知识点和案例代码 超链接(Hyperlink),也称为跃点链接,是互联网和文档编辑中的一种重要概念。 超链接的定义 超链接是指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页&#…...
⭐LeetCode(数学分类) 48. 旋转图像——优美的数学法转圈(原地修改)⭐
⭐LeetCode(数学分类) 48. 旋转图像——优美的数学法转圈(原地修改)⭐ 示例 1: 输入:root [5,3,6,2,4,null,8,1,null,null,null,7,9] 输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9] 示例 2: 输入࿱…...
深度学习PyTorch之13种模型精度评估公式及调用方法
深度学习pytorch之22种损失函数数学公式和代码定义 深度学习pytorch之19种优化算法(optimizer)解析 深度学习pytorch之4种归一化方法(Normalization)原理公式解析和参数使用 深度学习pytorch之简单方法自定义9类卷积即插即用 实时…...
tomcat单机多实例部署
一、部署方法 多实例可以运行多个不同的应用,也可以运行相同的应用,类似于虚拟主机,但是他可以做负载均衡。 方式一: 把tomcat的主目录挨个复制,然后把每台主机的端口给改掉就行了。 优点是最简单最直接,…...
Java开发者如何接入并使用DeepSeek
目录 一、准备工作 二、添加DeepSeek SDK依赖 三、初始化DeepSeek客户端 四、数据上传与查询 五、数据处理与分析 六、实际应用案例 七、总结 【博主推荐】:最近发现了一个超棒的人工智能学习网站,内容通俗易懂,风格风趣幽默ÿ…...
win10电脑鼠标速度突然变的很慢?
电脑鼠标突然变很慢,杀毒检测后没问题,鼠标设置也没变,最后发现可能是误触鼠标的“DPI”调节键。 DPI调节键在鼠标滚轮下方,再次点击即可恢复正常鼠标速度。 如果有和-的按键,速度变快,-速度变慢。 图源&…...
第四次CCF-CSP认证(含C++源码)
第四次CCF-CSP认证 第一道(easy)思路及AC代码 第二道(easy)思路及AC代码遇到的问题 第三道(mid)思路及AC代码 第一道(easy) 题目链接 思路及AC代码 这题就是将这个矩阵旋转之后输出…...
Netty基础—1.网络编程基础一
大纲 1.什么是OSI开放系统互连 2.OSI七层模型各层的作用 3.TCP/IP协议的简介 4.TCP和UDP的简介 5.TCP连接的三次握手 6.TCP连接的四次挥手 7.TCP/IP中的数据包 8.TCP通过确认应答与序列号提高可靠性 9.HTTP请求的传输过程 10.HTTP协议报文结构 11.Socket、短连接、长…...
