

新闻资讯
行业动态银行账户应封装为责任明确的实体,余额字段须private,仅通过deposit()和withdraw()校验后修改,构造方法拒绝负初始余额。
账户不是数据容器,而是有明确责任的实体。直接暴露 balance 字段或提供无校验的 setBalance() 方法,等于把取款机钥匙交给任意调用方。
private 修饰余额字段,强制所有变更走业务方法deposit(double amount) 和 withdraw(double amount) 是唯二修改余额的入口,内部需校验金额正负、透支等逻辑public Account(String accountNumber, double initialBalance) {
if (initialBalance < 0) {
throw new IllegalArgumentException("Initial balance cannot be negative");
}
this.accountNumber = accountNumber;
this.balance = initialBalance;
}浮点数精度问题在金融场景下是致命的。比如 0.1 + 0.2 在 Java 中结果是 0.30000000000000004,不是数学意义上的 0.3。
BigDecimal 存储和计算金额,且构造时用字符串(new BigDecimal("100.50")),避免 double 构造器引入误差add()、subtract()、multiply()、divide() 方法,并指定 RoundingMode
setScale(2, RoundingMode.HALF_UP) 统一保留两位小数转账不是两个独立操作:A 减钱、B 加钱。中间若发生异常(如 A 扣款成功但 B 入账失败),会导致资金丢失或重复入账。
BankService)中,而非单个 Account 类内用 Math.random() 或简单递增整数生成账号,在多实例或高并发下极易冲突。
UUID.randomUUID().toString().replace("-", "").substring(0, 10) 快速生成伪唯一 IDMap)做账户仓库,添加新账户前必须检查 map.containsKey(accountNumber),否则覆盖已有账户
质上已经不是账户,而是一个失控的上帝类。