Почему вместо статического основного метода void он использует нестатический метод - PullRequest
0 голосов
/ 17 мая 2018

Почему приведенный ниже фрагмент кода использует нестатический для запуска программы ???Преимущества запуска программы в таком стиле ???

public static void main(String[] args) {
    Main go = new Main();
    go.start();

}

public Main() {

}

public void start() {
    //SOME CODE HERE

}

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Классический объектно-ориентированный подход поощряет инкапсуляцию: все должно быть максимально локальным и должно быть возможно несколько экземпляров класса. Глобал это плохо и некрасиво.

Объектно-ориентированный подход также поощряет наследование, полиморфизм и возможность переопределять методы с четко определенной функциональностью. Или, альтернативно, состав (составьте альтернативные версии сложного объекта из четко определенных подкомпонентов).

В то время как один простой статический метод выглядит не сильно отличающимся от простого и простого нестатического, он может легко вызывать только другие статические методы этого класса и может просто получать доступ только к статическим переменным.

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

0 голосов
/ 17 мая 2018

По сути, есть два преимущества наличия main(), который просто создает экземпляр соответствующего класса для последующего вызова методов для этого объекта:

  • это позволяет вам «повторно использовать» этот класс Main более объектно-ориентированным способом. Если другой класс хочет использовать Main, то вызов статического метода для этого чаще всего не тот, который вам нужен (это усложняет юнит-тестирование, например, для использования статических методов). Следовательно, если «повторное использование» является одним из ваших требований, то создание экземпляра этого класса и его использование без вызова его статического main() может быть полезным.

  • Кроме того, также также немного упрощает юнит-тестирование основного класса.

...