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

Java中通过set/get方法实现类间变量传递及hostel_DtRm类示例

如何在Java中通过set/get方法实现类之间的变量传递?

嘿,我来给你理清楚Java里用set/get实现类间变量传递的逻辑,结合你提供的代码来完善和讲解~

核心逻辑先搞懂

在Java中,类之间的变量传递本质是通过对象实例来完成的:你需要先创建hostel_DtRm类的对象,然后在其他类(比如LogedInMain)里调用它的setXXX方法把值存进去;之后只要持有这个对象的引用,不管是当前类还是其他类,都能通过getXXX方法取出存储的值。这也是Java封装特性的典型应用——用私有变量隐藏内部数据,只通过指定方法对外暴露操作接口。

完善你提供的代码

首先你的hostel_DtRm类基础框架没问题,我们把未完成的LogedInMain类补全,并且加上测试逻辑:

1. 完整的hostel_DtRm类(加一点小优化)

public class hostel_DtRm {
    // 私有变量,外部无法直接访问
    private String guests;

    // 无参构造方法
    public hostel_DtRm() {}

    // Set方法:给guests赋值,可加入校验逻辑
    public void setguests(String guests) {
        // 示例:如果传入的客人信息为空,设置默认值
        if (guests == null || guests.trim().isEmpty()) {
            this.guests = "未知客人";
        } else {
            this.guests = guests;
        }
    }

    // Get方法:获取guests的值
    public String getguests() {
        return guests;
    }
}

2. 补全并优化LogedInMain类

public class LogedInMain {
    // 声明hostel_DtRm类型的成员变量
    private hostel_DtRm dtrm;

    // 构造方法中初始化dtrm对象(必须先实例化,否则会报NullPointerException)
    public LogedInMain() {
        dtrm = new hostel_DtRm();
    }

    // 封装设置客人信息的方法
    public void updateGuestInfo(String guestName) {
        // 调用hostel_DtRm的setguests方法赋值
        dtrm.setguests(guestName);
        System.out.println("已更新客人信息:" + guestName);
    }

    // 封装获取客人信息的方法
    public String retrieveGuestInfo() {
        // 调用hostel_DtRm的getguests方法取值
        return dtrm.getguests();
    }

    // 测试主方法
    public static void main(String[] args) {
        // 创建LogedInMain实例
        LogedInMain mainApp = new LogedInMain();
        
        // 设置客人信息
        mainApp.updateGuestInfo("Klayd Pro");
        
        // 获取并打印客人信息
        String currentGuest = mainApp.retrieveGuestInfo();
        System.out.println("当前登记客人:" + currentGuest);
        
        // 测试空值情况
        mainApp.updateGuestInfo("");
        System.out.println("空值处理后的客人:" + mainApp.retrieveGuestInfo());
    }
}

跨多个类传递数据的场景

如果需要在更多类之间共享hostel_DtRm里的变量,关键是传递同一个对象的引用,而不是每个类都new一个新的hostel_DtRm对象。比如我们再加一个CheckoutService类负责结账逻辑:

public class CheckoutService {
    private hostel_DtRm dtrm;

    // 通过构造方法传入已有的hostel_DtRm对象引用
    public CheckoutService(hostel_DtRm dtrm) {
        this.dtrm = dtrm;
    }

    // 处理结账流程
    public void handleCheckout() {
        String guest = dtrm.getguests();
        System.out.println("正在为客人【" + guest + "】办理退房手续...");
        // 这里可以加更多业务逻辑,比如更新房间状态等
    }
}

然后在LogedInMain的main方法里调用这个服务:

public static void main(String[] args) {
    LogedInMain mainApp = new LogedInMain();
    mainApp.updateGuestInfo("Klayd Pro");
    
    // 获取mainApp里已初始化的dtrm对象引用
    hostel_DtRm sharedDtRm = mainApp.dtrm;
    
    // 把同一个对象传递给CheckoutService
    CheckoutService checkoutService = new CheckoutService(sharedDtRm);
    checkoutService.handleCheckout(); // 输出:正在为客人【Klayd Pro】办理退房手续...
}

关键注意点

  • 必须实例化对象:如果直接调用dtrm.setguests()但没先执行dtrm = new hostel_DtRm(),会抛出NullPointerException,因为dtrm初始值是null。
  • 封装的好处:在set方法里可以加入校验、格式转换等逻辑,避免非法数据存入;get方法也可以返回处理后的值(比如给字符串加前缀)。
  • 对象引用的传递:多个类共享数据时,一定要传递同一个对象的引用,否则每个类操作的都是自己的独立对象,数据不会同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:11:38