实例化MagicBakery对象时未触发其main方法执行的问题求助
实例化MagicBakery对象时未触发其main方法执行的问题求助
嘿,我完全懂你现在的困惑!咱们先把问题的根源讲清楚:
在Java里,main方法是程序的入口点——只有当你直接通过JVM运行某个类(比如在命令行执行java MagicBakery,或者IDE里直接运行这个类)时,JVM才会自动调用该类的main方法。而你现在是在BakeryDriver的main方法里实例化MagicBakery对象,这个操作只会调用MagicBakery的构造方法(如果没手动写构造,就是默认的空构造),完全不会触发它的main方法执行,这就是打印语句没输出的原因。
你之前单独运行MagicBakery能看到预期输出,是因为当时JVM直接触发了它的main方法,但实例化对象和运行类的入口方法是完全独立的两个操作哦。
给你两个可行的解决方案,选哪个看你的需求:
方案一:把MagicBakery的逻辑移到构造方法里
把原来MagicBakery的main方法里的代码,全部移到它的构造方法中,这样实例化对象时就会自动执行这些逻辑:
public class MagicBakery { // 构造方法:实例化时自动执行 public MagicBakery() { // 这里放你原来在MagicBakery main里的打印语句和业务代码 System.out.println("欢迎来到魔法面包房!"); // 其他逻辑代码... } // 保留原来的main方法(方便单独测试这个类) public static void main(String[] args) { new MagicBakery(); } }
这样修改后,你现在的BakeryDriver代码不需要改动,实例化MagicBakery时就会执行原来的打印和逻辑了。
方案二:封装独立方法,实例化后主动调用
把MagicBakery的业务逻辑封装成一个普通方法,然后在实例化对象后手动调用这个方法,这种方式更灵活(比如可以控制执行时机):
- 修改
MagicBakery:
public class MagicBakery { // 封装业务逻辑的方法 public void startBakery() { // 原来main里的代码放在这里 System.out.println("魔法面包房开始营业啦!"); // 其他业务代码... } // 保留入口main方法 public static void main(String[] args) { MagicBakery bakery = new MagicBakery(); bakery.startBakery(); } }
- 修改
BakeryDriver的main方法:
public static void main(String[] args) { MagicBakery bakery = new MagicBakery(); bakery.startBakery(); // 主动调用逻辑方法 }
这样调整后,就能和之前一样得到相同的输出啦!
备注:内容来源于stack exchange,提问作者António Rebelo
相关产品推荐
相关产品推荐

