如何在Depot类中调用BusGenerator类的input静态变量?
在Depot类中访问BusGenerator的input变量的可行方法
嘿,针对你的需求,我整理了几种实用的实现方式,你可以根据自己的代码场景来选择:
方法一:直接访问静态变量(最简单的方式)
你的input变量被定义成了static,这意味着它属于BusGenerator类本身,而不是某个实例。所以你可以直接在Depot类里通过BusGenerator.input来访问它。不过要记得先调用BusGenerator的run()方法获取用户输入,否则input会是默认的0值。
示例代码:
public class Depot { public void handleBusCount() { // 先初始化BusGenerator并获取用户输入 BusGenerator busGenerator = new BusGenerator(this); busGenerator.run(); // 直接访问静态变量 int busNumber = BusGenerator.input; System.out.println("Depot收到的巴士数量:" + busNumber); } }
⚠️ 注意:静态变量是全局共享的,如果后续创建多个BusGenerator实例,新的输入会覆盖之前的input值,这点要留意。
方法二:通过BusGenerator实例的getinput()方法获取
你已经写了getinput()方法,虽然它返回的是静态变量,但也可以通过BusGenerator的实例来调用这个方法。不过更规范的写法是直接用类名调用静态方法(比如BusGenerator.getinput()),因为静态方法属于类而不是实例。
示例代码:
public class Depot { private BusGenerator busGen; public Depot() { // 初始化并获取输入 busGen = new BusGenerator(this); busGen.run(); } public void checkBusNumber() { // 通过实例调用getinput() int count = busGen.getinput(); // 或者更规范的类名调用:int count = BusGenerator.getinput(); System.out.println("当前需要调度的巴士数量:" + count); } }
方法三:重构为实例变量(更推荐的面向对象方式)
如果你的业务场景不需要全局共享巴士数量,建议把input从静态变量改成实例变量,这样每个BusGenerator实例都有自己独立的输入值,避免多个实例互相干扰,也更符合面向对象的封装原则。
首先修改BusGenerator类:
import java.util.Scanner; public class BusGenerator { // 去掉static,改为实例变量 private int input; private Scanner scn = new Scanner(System.in); private Depot depot; public BusGenerator(Depot depot) { this.depot = depot; } public int getinput() { return input; } public void run() { System.out.println("Enter Number of Buses:" ); input = scn.nextInt(); // 可以在这里关闭Scanner,避免资源泄漏 // scn.close(); } }
然后在Depot类中通过实例获取:
public class Depot { public void processBusTasks() { BusGenerator busGenerator = new BusGenerator(this); busGenerator.run(); int busCount = busGenerator.getinput(); // 这里可以添加巴士调度的业务逻辑 System.out.println("Depot将安排" + busCount + "辆巴士执行任务"); } }
最后再提个小建议:记得在合适的时机关闭Scanner对象,避免资源泄漏哦~
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

