Инициализация объекта должна вызывать основной (?)

Я работаю над проектом для университета, и нам сказали переместить код, который ранее находился в основном классе «Драйвер пекарни», в другой класс в файле под названием «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);
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваше понимание неверно. Построение объекта запускает конструктор, а не main. Статическая функция main вызывается средой выполнения Java только тогда, когда вы запускаете этот класс в точке входа вашего приложения (или если вы явно пишете MagicBakery.main(someStringArray)).

В вашем случае это звучит так, будто вы хотите, чтобы объект MagicBakery мог делать некоторые вещи, поэтому я бы рекомендовал изменить ваш main в этом классе на что-то вроде

public CustomerOrder makeCustomerOrder() {
  // Method body ...
}

Тогда в своем BakeryDriver.main вы можете написать

MagicBakery bakery = new MagicBakery();
bakery.makeCustomerOrder();

Да, исправление заключалось в том, чтобы просто переместить код в конструктор, а не в основной метод. Огромное спасибо за то, что так доходчиво объяснили, я чуть не сошел с ума, вы легенда.

António Rebelo 10.04.2024 16:38

Другие вопросы по теме

Python: есть ли способ остановить бесконечный цикл, выполняемый в методе класса Python?
Почему я не могу условно расширить пользовательский класс элемента HTML?
Вызов функции класса только один раз при изменении переменной
RangeError: превышен максимальный размер стека вызовов – Typescript
Почему редактирование значения с использованием указателя, то есть частного поля класса, требует объявления дополнительной переменной?
Как устранить ошибку компилятора: в моем случае нет соответствующей функции для вызова dmhFS::dmhFS()?
Getter возвращает неопределенное значение в операторе if. Кажется, не работает для сравнения
Как сохранить/получить информацию о классе в/из таблицы?
C++: Как реализовать указатель на другой класс в качестве члена?
Как сделать так, чтобы я мог передать указатель класса на другой класс, который был объявлен из первого класса