1. Обзор
2. Общая подпись
public static void main(String[] args) { }
Именно так мы этому научились, именно так IDE автоматически заполняет код для нас. Но это не единственная форма, которую может принять этот метод, есть несколько допустимых вариантов, которые мы можем использовать и не каждый разработчик обращает внимание на этот факт.
Прежде чем мы погрузимся в эти сигнатуры методов, давайте рассмотрим значение каждого ключевого слова общей подписи:
- public – модификатор доступа, означающий глобальную видимость
- статический – к методу можно получить доступ прямо из класса, нам не нужно создавать экземпляр объекта, чтобы иметь ссылку и использовать его
- void – означает, что этот метод не возвращает значение
- main – имя метода, это идентификатор, который JVM ищет при выполнении программы Java
Что касается параметра args , то он представляет значения, полученные методом. Именно так мы передаем аргументы программе при ее первом запуске.
Параметр args представляет собой массив String s. В следующем примере:
java CommonMainMethodSignature foo bar
мы выполняем программу Java под названием Common Main Method Signature и передаем 2 аргумента: foo и bar . Эти значения могут быть доступны внутри метода main как args[0] (имеющие значение foo ) и args[1] (имеющие значение bar ).
В следующем примере мы проверяем args, чтобы решить, следует ли загружать тестовые или производственные параметры:
public static void main(String[] args) { if (args.length > 0) { if (args[0].equals("test")) { // load test parameters } else if (args[0].equals("production")) { // load production parameters } } }
Всегда полезно помнить, что идеи также могут передавать аргументы в программу.
3. Различные способы написания метода main()
Давайте проверим несколько различных способов написания метода main . Хотя они не очень распространены, это действительные подписи.
Обратите внимание, что ни один из них не является специфичным для метода main , они могут использоваться с любым методом Java, но они также являются допустимой частью метода main .
Квадратные скобки могут быть помещены рядом с Strong , как в общем шаблоне, или рядом с args с обеих сторон:
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) { }
синхронизированные и final также являются допустимыми ключевыми словами для метода main , но здесь они не будут иметь эффекта.
С другой стороны, final может быть применен к args , чтобы предотвратить изменение массива:
public static void main(final String[] args) { }
Чтобы закончить эти примеры, мы также можем написать метод main со всеми вышеперечисленными ключевыми словами (которые, конечно, вы, вероятно, никогда не будете использовать в практическом применении):
final static synchronized strictfp void main(final String[] args) { }
4. Наличие Более Одного Метода main()
Мы также можем определить более одного основного метода внутри нашего приложения.
На самом деле, некоторые люди используют его в качестве примитивного метода тестирования для проверки отдельных классов (хотя тестовые фреймворки, такие как JUnit , гораздо более подходят для этой деятельности).
Чтобы указать, какой main метод JVM должен выполняться в качестве точки входа нашего приложения, мы используем файл MANIFEST.MF . Внутри манифеста мы можем указать основной класс:
Main-Class: mypackage.ClassWithMainMethod
Это в основном используется при создании исполняемого файла .jar . Мы указываем, какой класс имеет метод main для запуска выполнения, через файл манифеста, расположенный по адресу META-INF/MANIFEST.MF (закодированный в UTF-8).
5. Заключение
В этом руководстве описаны детали метода main и некоторые другие формы, которые он может принять, даже те, которые не очень распространены для большинства разработчиков.
Имейте в виду, что, хотя все примеры, которые мы показали, верны с точки зрения синтаксиса, они просто служат образовательной цели, и большую часть времени мы будем придерживаться общей подписи для выполнения нашей работы.