static变量适合做全局计数器,因其随类加载初始化、生命周期贯穿应用全程、所有实例共享同一副本,天然支持跨对象计数统计,如对象创建次数、活跃数量等。

在 Java 中,用 static 变量实现多个对象间共享计数统计是最直接有效的方式——它属于类本身,不依赖实例,所有对象读写的是同一份内存。
为什么 static 变量适合做全局计数器
static 变量随类加载而初始化,生命周期贯穿整个应用运行期,且只有一份副本。无论创建多少个对象,访问的都是同一个变量,天然支持跨实例数据共享。
例如:统计某类被创建了多少次、某个操作被执行了多少次、当前活跃对象数量等,都可借助 static 计数器完成。
基础写法:声明 + 构造器自增
最常见场景是统计对象创建总数:
立即学习“Java免费学习笔记(深入)”;
- 在类中声明
private static int count = 0; - 在构造方法中执行
count++; - 提供一个
public static方法(如getCount())供外部安全读取
示例:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
public class User {
private static int totalCount = 0;
public User() {
totalCount++;
}
public static int getTotalCount() {
return totalCount;
}
}
// 使用:
new User(); new User(); new User();
System.out.println(User.getTotalCount()); // 输出:3
注意线程安全:多线程环境下需同步
如果对象可能在多线程中并发创建(比如 Web 应用中高频请求),totalCount++ 不是原子操作,可能导致计数丢失。
解决方式有二:
- 用
synchronized块包裹自增逻辑(推荐对类加锁:synchronized (User.class)) - 改用
AtomicInteger:声明为private static AtomicInteger totalCount = new AtomicInteger(0);,调用totalCount.incrementAndGet()
后者更轻量、无锁,适合高并发计数场景。
扩展技巧:配合 static 代码块与清理逻辑
若需初始化值或注册 JVM 关闭钩子(如记录最终统计),可用 static 代码块:
-
static { totalCount = 100; }—— 启动时预设初始值 -
Runtime.getRuntime().addShutdownHook(...)—— 在 JVM 退出前打印/保存统计结果
注意:static 变量不能被序列化,也不随对象一起持久化;若需跨 JVM 持久计数,应改用数据库、Redis 等外部存储。

















