Я работаю над проектом для университета, и нам сказали переместить код, который ранее находился в основном классе «Драйвер пекарни», в другой класс в файле под названием «Magic Bakery» (также поместив его в основной класс). И в основной части драйвера Bakery, чтобы создать объект класса Magic Bakery, выходные данные должны быть такими же (поскольку код в основной части MagicBakery должен выполняться при создании объекта).
Однако, это не так. У меня есть несколько операторов печати, которые работали, когда я запускал файл драйвера Bakery, но теперь, после перемещения кода, эти операторы печати не выполняются. Кто-нибудь знает, почему?
Я знаю, что код в main MagicBakery работает во время работы, и я получаю ожидаемый результат.
Это код:
BakeryDriver.java
import bakery.MagicBakery;
public class BakeryDriver {
public BakeryDriver() {
}
public static void main(String[] args) {
MagicBakery bakery = new MagicBakery();
}
}
MagicBakery.java
package bakery;
import java.util.ArrayList;
public class MagicBakery{
public MagicBakery(){
}
public static void main(String[] args){
Ingredient flour = new Ingredient("flour");
Ingredient sugar = new Ingredient("sugar");
Ingredient egg = new Ingredient("egg");
System.out.println(flour.toString());
System.out.println(sugar.toString());
System.out.println(egg.toString());
ArrayList<Ingredient> recipe_test = new ArrayList<Ingredient>();
recipe_test.add(flour);
recipe_test.add(sugar);
recipe_test.add(egg);
Layer layer_test = new Layer("testing yo", recipe_test);
System.out.print(layer_test.getRecipeDescription());
CustomerOrder order_test = new CustomerOrder("test", recipe_test, recipe_test, 0);
}
}
Ваше понимание неверно. Построение объекта запускает конструктор, а не main
. Статическая функция main
вызывается средой выполнения Java только тогда, когда вы запускаете этот класс в точке входа вашего приложения (или если вы явно пишете MagicBakery.main(someStringArray)
).
В вашем случае это звучит так, будто вы хотите, чтобы объект MagicBakery
мог делать некоторые вещи, поэтому я бы рекомендовал изменить ваш main
в этом классе на что-то вроде
public CustomerOrder makeCustomerOrder() {
// Method body ...
}
Тогда в своем BakeryDriver.main
вы можете написать
MagicBakery bakery = new MagicBakery();
bakery.makeCustomerOrder();
Да, исправление заключалось в том, чтобы просто переместить код в конструктор, а не в основной метод. Огромное спасибо за то, что так доходчиво объяснили, я чуть не сошел с ума, вы легенда.