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

实例化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的业务逻辑封装成一个普通方法,然后在实例化对象后手动调用这个方法,这种方式更灵活(比如可以控制执行时机):

  1. 修改MagicBakery:
public class MagicBakery {
    // 封装业务逻辑的方法
    public void startBakery() {
        // 原来main里的代码放在这里
        System.out.println("魔法面包房开始营业啦!");
        // 其他业务代码...
    }

    // 保留入口main方法
    public static void main(String[] args) {
        MagicBakery bakery = new MagicBakery();
        bakery.startBakery();
    }
}
  1. 修改BakeryDriver的main方法:
public static void main(String[] args)  {
    MagicBakery bakery = new MagicBakery();
    bakery.startBakery(); // 主动调用逻辑方法
}

这样调整后,就能和之前一样得到相同的输出啦!

备注:内容来源于stack exchange,提问作者António Rebelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:39:33