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

练习Java getter/setter时打印方法仅输出最后一条注册人信息如何解决

问题原因

核心原因是单个类的实例只能存储一组数据。你每次调用setName()、setAge()方法时,都是直接覆盖当前实例已有的name、age属性值,旧值会被直接清理,所以程序运行到最后内存里只剩最后一次赋值的Choi Jin Woo的信息,printAllDetails方法自然只能输出这一条记录。你之前每次设置完立刻打印能拿到对应结果,只是因为打印时还没执行下一次赋值操作覆盖旧值而已。

数组存储方案(推荐)

确实需要用数组(或集合容器)存储数据,但不是把多组值存在单个类的数组属性里,而是将每个注册人对应为一个独立的BASIC_GettersSetters实例,再把这些实例存入数组统一管理,和get、set方法的配合逻辑如下:

  1. 首先调整BASIC_GettersSetters类的职责,让它仅存储单个注册人的信息,保留基础get、set方法,新增单个实例的信息打印方法即可:
public class BASIC_GettersSetters {
    private String name;
    private int age;

    // Getter方法
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }

    // Setter方法
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }

    // 打印当前注册人信息
    public void printSingleDetail() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
}
  1. 外层创建实例数组,每次新建实例、调用set方法赋值后存入数组,最后遍历数组调用对应get方法或打印方法即可输出所有信息:
public class Test {
    public static void main(String[] args) {
        // 定义长度为3的数组存储3个注册人实例
        BASIC_GettersSetters[] userList = new BASIC_GettersSetters[3];

        // 录入第一个注册人
        BASIC_GettersSetters user1 = new BASIC_GettersSetters();
        user1.setName("Kim Min Ji");
        user1.setAge(22);
        userList[0] = user1;

        // 录入第二个注册人
        BASIC_GettersSetters user2 = new BASIC_GettersSetters();
        user2.setName("Lee Seo Joon");
        user2.setAge(27);
        userList[1] = user2;

        // 录入第三个注册人
        BASIC_GettersSetters user3 = new BASIC_GettersSetters();
        user3.setName("Choi Jin Woo");
        user3.setAge(30);
        userList[2] = user3;

        // 打印所有注册人信息
        for (BASIC_GettersSetters user : userList) {
            // 可直接调用打印方法
            user.printSingleDetail();
            // 也可以用get方法取值自行拼接输出
            // System.out.println("姓名:" + user.getName() + ",年龄:" + user.getAge());
        }
    }
}
其他可行方案
  • 用集合类替代数组:如果不确定注册人总数量,用ArrayList<BASIC_GettersSetters>比数组更灵活,不需要提前指定长度,增删元素更方便,整体管理逻辑和数组一致。
  • 单实例内置集合存储:如果一定要用同一个实例管理所有注册人数据,可以给BASIC_GettersSetters类新增List<String> nameList、List<Integer> ageList两个集合属性,调用set方法时改为往集合里追加元素而非覆盖单个属性,printAllDetails方法遍历两个集合打印即可。但该写法不符合面向对象设计规范,后续扩展属性的成本很高,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:24:05