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

从类创建对象时如何仅为第一个创建的对象设置不同默认值

问题根因
  • 成员变量作用域错误:当前代码里的firstOnly标识、AccountBalanceMap余额映射都是实例级变量,每new一个Account对象就会重新初始化一份,所以每次创建对象时firstOnly都是默认值true,导致所有账户都走了大额余额的逻辑。这两个变量需要改为静态成员,归Account类所有,所有实例共享同一份数据。
  • 赋值逻辑错误:修改firstOnly状态时误用了比较运算符==,没有实际修改值的效果,要替换为赋值运算符=。
  • 变量冗余:你定义的实例属性balance初始化后没有实际使用,可以同步映射表中的余额值赋值给该属性,后续可以直接通过实例获取余额。
修正后可运行代码
import java.util.HashMap;

public class Account {
    String address;
    int balance;
    // 改为静态变量,所有实例共享
    public static HashMap<String,Integer> AccountBalanceMap = new HashMap<>();
    // 设为私有避免外部随意修改状态
    private static boolean firstOnly = true;

    public Account(String address) {
        this.address = address;
        if(firstOnly) {
            this.balance = Integer.MAX_VALUE;
            AccountBalanceMap.put(address, Integer.MAX_VALUE);
            // 用赋值运算符=修改首次创建标识
            firstOnly = false;
            System.out.println("first ran");
        } else {
            this.balance = 0;
            AccountBalanceMap.put(address, 0);
            System.out.println("second+ ran");
        }
        System.out.println(AccountBalanceMap);
    }
}
验证逻辑

创建第一个Account实例时会匹配firstOnly为true的分支,余额设为Integer.MAX_VALUE,后续所有新建的Account实例都会走else分支,余额默认设为0,所有账户的地址和余额统一保存在静态的AccountBalanceMap中可全局查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:36:01