java中static修饰的变量是类变量,类加载时分配内存,所有实例共享同一份数据;声明需在类内方法外,格式为“访问修饰符 static 数据类型 变量名”,如public static string app_name = "myapp"。

Java 中用 static 修饰的变量是类变量,它在类加载时就分配内存,所有实例共享同一份数据,修改一处,全部可见。
怎么正确声明静态变量
静态变量必须定义在类内部、方法外部;不能写在方法、构造器或普通代码块里。语法格式为:
- 访问修饰符 + static + 数据类型 + 变量名 [= 初始值];
- 例如:
public static String APP_NAME = "MyApp"; - 推荐用
private static配合 public getter/setter 控制访问,避免直接暴露内部状态。
静态变量为什么能实现数据共享
因为 JVM 在类加载阶段就把 static 变量存入元空间(JDK 8+),整个类只有一份副本,不依赖对象创建:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 即使没 new 出任何对象,也能通过
ClassName.variableName直接访问; - 所有对象读写的是同一内存地址,
obj1.count++和obj2.count++实际操作的是同一个变量; - 生命周期从类加载开始,到类卸载才结束,比任何对象都长。
使用中要注意的关键点
共享带来便利,也引入风险,尤其在多线程场景下:
- 静态变量不能访问
this或非静态成员(编译报错); - 多个线程同时修改时可能出现竞态条件,需加同步(如
synchronized、AtomicInteger); - 慎用于可变对象引用(如
private static List<string> cache;</string>),避免外部误改内容; - 避免滥用:不是所有“看起来全局”的需求都该用 static,要考虑模块解耦和测试友好性。
常见适用场景
适合存放跨实例一致、变化频率低的数据:
- 应用配置项(如数据库连接 URL、超时时间);
- 全局计数器(如请求总数、在线用户数);
- 缓存容器(配合 volatile 或并发集合更安全);
- 单例模式中的唯一实例引用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










