发布于2026-07-08 阅读(0)
扫一扫,手机访问
在 Ja va 的多对象场景下,要实现全局性的计数统计,static 变量几乎是最直接、最高效的选择。它属于类本身,不依赖任何具体实例,所有对象读写的是同一块内存——这天然就支持了跨实例的数据共享。

static 变量的生命周期贯穿整个应用运行期,随类加载而初始化,且全局只有一份副本。无论你创建多少个对象,访问的永远是同一个变量。因此,统计某个类被创建了多少次、某个操作被执行了多少次、当前活跃对象数量等场景,用 static 计数器来实现再合适不过。
最常见的场景是统计对象的创建总数。做法很简单:在类中声明一个 private static int count = 0;,然后在构造方法中执行 count++;,同时提供一个 public static 方法(比如 getCount())供外部安全读取。来看一个具体例子:
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()后者更轻量、无锁,适合高并发计数的场景,是实际项目中的首选。
如果需要初始化值或在 JVM 退出前做最后的统计记录,可以利用 static 代码块:
static { totalCount = 100; } —— 启动时预设一个初始值Runtime.getRuntime().addShutdownHook(...) —— 在 JVM 退出前打印或保存最终的统计结果最后提醒一点:static 变量不能被序列化,也不会随对象一起持久化。如果业务中需要跨 JVM 进程持久计数,那就得改用数据库、Redis 等外部存储了,别指望它来扛持久化任务。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8