0

0

在Java里static关键字的基本用法_Java静态语法说明

P粉602998670

P粉602998670

发布时间:2026-01-31 12:56:02

|

716人浏览过

|

来源于php中文网

原创

static修饰变量属类级别共享,所有实例共用同一内存;static方法无需实例、仅访问static成员;static块在类加载时执行一次;static内部类不依赖外部实例且无隐式引用。

在java里static关键字的基本用法_java静态语法说明

static修饰变量:类级别共享,不依赖实例

static 修饰的变量属于类本身,而不是某个对象实例。所有实例共享同一份内存空间,修改任一实例的该变量值,其他实例看到的就是修改后的值。

常见错误现象:NullPointerException 不是因为 static 变量为空,而是误以为它会随实例初始化自动赋值;或者在多线程环境下未加同步,导致竞态修改。

  • 不能在 static 上下文中直接访问非 static 成员(如普通字段或方法),编译报错:non-static variable xxx cannot be referenced from a static context
  • 初始化时机在类加载时,早于任何构造器执行;可用静态代码块 static { ... } 做复杂初始化
  • 推荐用 private static final 定义常量,避免意外修改

static修饰方法:无需实例即可调用

static 方法只能访问 static 字段和调用其他 static 方法,因为它不持有 this 引用——没有当前对象上下文。

典型使用场景:工具类(如 java.util.Collections)、工厂方法、主入口 public static void main(String[] args)

立即学习Java免费学习笔记(深入)”;

Buildt.ai
Buildt.ai

AI驱动的软件开发平台,可以自动生成代码片段、代码分析及其他自动化任务

下载
  • 不能重写(override)static 方法,子类同名方法只是隐藏(hiding),调用取决于引用类型而非实际类型
  • 不能用 thissuper 关键字
  • 泛型方法若声明为 static,其类型参数必须独立于类泛型,例如 public static <t> List<t> asList(T... a)</t></t> 是合法的

static代码块:控制类初始化逻辑

static 代码块在类第一次被加载时执行,且仅执行一次。适合做一次性资源准备,比如读配置、注册驱动、初始化缓存。

注意:多个 static 块按源码顺序执行;若抛出异常,类加载失败,后续所有对该类的引用都会触发 NoClassDefFoundError

  • 不能访问非 static 成员
  • 不能包含 return 语句(除非在方法内)
  • static 字段初始化顺序一致:字段声明在前则先初始化,块在前则先执行

static内部类:脱离外部实例的嵌套类

static 内部类本质上是“寄生”在外部类命名空间下的独立类,不持有对外部类实例的隐式引用。因此它可以不依赖外部类实例而存在,也能定义自己的 static 成员。

容易踩的坑:误以为 static 内部类能直接访问外部类的非 static 字段——它不能,只能访问外部类的 static 成员。

  • 创建实例不需要外部类对象:new Outer.StaticInner()
  • 相比普通内部类,内存开销更低,无隐式引用泄漏风险
  • 常用于 Builder 模式、工具辅助类(如 HashMap.Node
Java 的 static 看似简单,但真正难的是理解它和类加载、对象生命周期、内存可见性之间的耦合。尤其是多线程中对 static 变量的读写,不加同步或不满足 happens-before,结果可能完全不符合直觉。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1091

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1571

2023.10.24

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

188

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

136

2025.11.27

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

121

2026.03.13

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

806

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

381

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.21

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

7

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.6万人学习

Java 教程
Java 教程

共578课时 | 84.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号