You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构造器重载调用次数疑问:Java账户实例化静态计数异常排查

问题分析与解决

问题根源

你猜的完全正确——每次调用无参构造时,numberOfAccounts会被自增两次,这就是计数异常的核心原因:

  • 当执行new BankAccount()时,无参构造的第一行this(0, 0)会调用带参构造,带参构造里已经执行了numberOfAccounts++;
  • 带参构造执行完毕后,程序回到无参构造,又会执行一次numberOfAccounts++,等于一次无参实例化触发了两次计数增加。

对应你的测试场景:

  • account1和account2用带参构造,各触发1次自增,累计2;
  • account3用无参构造,触发2次自增,累计2+2=4,和你实际得到的结果一致;
  • 再新增一个无参实例account4,会再增加2,最终累计6,也符合你的观察。

修复方案

只需要在仅一个构造方法中保留numberOfAccounts++即可,推荐修改无参构造,删掉其中的自增语句,因为带参构造是更基础的实现:

public class BankAccount {
    private double checkingBalance;
    private double savingBalance;
    private static int numberOfAccounts;

    public BankAccount() {
        this(0, 0);
        // 移除这行重复的自增代码
    }
    public BankAccount(double checkingInitial, double savingInitial) {
        this.checkingBalance = checkingInitial;
        this.savingBalance = savingInitial;
        numberOfAccounts++;
    }

    public static int getNumberOfAccounts() {
        return numberOfAccounts;
    }
}

修改后,无论用哪种构造方法实例化对象,numberOfAccounts都会只被自增一次,就能得到正确的计数结果。

内容的提问来源于stack exchange,提问作者Jamal Harb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:10:30