Перейти к содержанию

Что такое метод main() в Java

Каждой программе нужно место для начала ее выполнения. В программах Java это метод main().

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

Общепринятая сигнатура

Наиболее распространенный шаблон метода main():

public static void main(String[] args) { }

Многие привыкли к тому, как IDE автоматически дополняет код при написании метода main(). Но это не единственная форма, которую может принять данный метод, есть несколько допустимых вариантов, которые можно использовать, но не каждый разработчик обращает на это внимание.

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

  • public – модификатор доступа, означающий глобальную видимость;
  • static – к методу можно получить доступ прямо из класса, не нужно создавать экземпляр объекта, чтобы иметь ссылку и использовать его;
  • void – означает, что метод не возвращает значение;
  • main – имя метода, это идентификатор, который JVM ищет при выполнении Java-программы.

Что касается параметра args, то он представляет значения, полученные методом.

Параметр args представляет собой массив String. В следующем примере

java CommonMainMethodSignature foo bar

выполняем Java-программу под названием CommonMainMethodSignature и передаем 2 аргумента: foo и bar. Доступ к этим значениям можно получить внутри метода main() как args[0] (со значением foo) и args[1] (со значением bar).

В следующем примере проверяем аргументы, чтобы решить, следует ли загружать тестовые или рабочие параметры:

public static void main(String[] args) {
    if (args.length > 0) {
        if (args[0].equals("test")) {
            // загружаем тестовые параметры
        } else if (args[0].equals("production")) {
            // загружаем рабочие параметры
        }
    }
}

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

Различные способы написания метода main()

Проверим несколько различных способов написания метода main(). Хотя они не очень распространены, но, тем не менее, являются допустимыми сигнатурами.

Обратите внимание, что ни один из них не относится к методу main(), их можно использовать с любым методом Java, но они являются допустимой частью метода main().

Квадратные скобки можно поставить рядом со String, как в общепринятом шаблоне, или рядом с аргументами с обеих сторон:

public static void main(String []args) { }
public static void main(String args[]) { }

Аргументы могут быть представлены как varargs:

public static void main(String...args) { }

Можно добавить strictfp для метода main(), который используется для совместимости между процессорами при работе со значениями с плавающей запятой:

public strictfp static void main(String[] args) { }

synchronized и final также являются допустимыми ключевыми словами для метода main(), но здесь они не будут иметь никакого эффекта.

С другой стороны, final можно применить к аргументам, чтобы предотвратить изменение массива:

public static void main(final String[] args) { }

Чтобы закончить эти примеры, можно написать метод main() со всеми вышеперечисленными ключевыми словами (которые вряд ли будете использовать в практическом приложении):

final static synchronized strictfp void main(final String[] args) { }

Наличие более одного метода main()

Можно определить более одного метода main() внутри приложения.

На самом деле, некоторые используют его как примитивную технику тестирования для проверки отдельных классов (хотя тестовые фреймворки, такие как JUnit, гораздо больше подходят для этого).

Чтобы указать, какой метод main() JVM должна выполнять в качестве точки входа приложения, используем файл MANIFEST.MF. Внутри манифеста можно указать основной класс:

Main-Class: mypackage.ClassWithMainMethod

В основном это используется при создании исполняемого файла .jar. Указываем, у какого класса есть основной метод для запуска выполнения, через файл манифеста, расположенный по адресу META-INF/MANIFEST.MF (в кодировке UTF-8).

Заключение

В этом руководстве подробно описаны метод main() и некоторые формы, которые он может принимать, даже те, которые не очень распространены среди большинства разработчиков.

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

Оригинал