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

Java银行转账程序操作对象属性返回错误,transfer方法异常排查

问题根因

你遇到的问题核心是account类的成员变量错误使用了static修饰符:

  • static修饰的属性属于类本身,所有该类的实例会共享同一份属性值,不会为每个账户单独存储独立的余额、id、名称信息。

具体运行流程拆解

  1. 创建A1账户实例时,给类的静态属性赋值:id=A101、name=Tan Ah Teck、balance=88
  2. 后续创建A2账户实例时,直接覆盖了类的静态属性值,此时静态balance被修改为9,id、name也同步被覆盖为A2的信息
  3. 执行from.debit(19)操作时,判断的是当前共享的静态balance值9和转账金额19的大小,9<19,因此触发「You balance is insufficent.」提示,扣款操作不执行,balance仍为9
  4. 执行to.credit(19)操作时,给共享的静态balance加19,最终值变为28
  5. 打印A1、A2余额时,读取的都是同一个类静态balance的值,因此两个账户的余额都显示为28
修复方案

删除account类三个成员变量的static修饰符,将属性改为实例级别,每个账户就会拥有独立的属性存储:

public class account {
    // 移除static修饰符,改为实例属性
    public String id;
    public String name;
    private int balance;

    public account() {
        id = "Null";
        name = "Null";
        balance = 0;
    }

    public account(String id, String name, int balance) {
        this.id = id;
        this.name = name;
        this.balance = balance;
    }
            
    public int getbalance() {
        return balance;
    }

    public void credit(int amount) {
        int newbalance = balance + amount;
        balance = newbalance;
    }

    public void debit(int amount) {
        if (amount <= balance) {
            int newbalance = balance - amount;
            balance = newbalance;
        } else {
            System.out.println("You balance is insufficent.");
        }  
    }
}

修改后重新运行测试类,就会得到预期结果:A1余额69、A2余额28,无余额不足提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:54:07