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
相关产品推荐
相关产品推荐

