从类创建对象时如何仅为第一个创建的对象设置不同默认值
问题根因
- 成员变量作用域错误:当前代码里的
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
相关产品推荐
相关产品推荐

