Какой смысл аргументов String [] в Java? - PullRequest
0 голосов
/ 12 ноября 2011

Всякий раз, когда вы объявляете метод main в классе, вы всегда должны создавать массив String, называемый "args". В чем смысл? Если я не живу под камнем, агрументы командной строки в Java почти не используются. И когда я пытаюсь запустить это ...

//this program won't compile
public class SomeClass {
    public static void main(){
        System.out.println("This text will never be displayed :(");
    }
}

Вывод показывает это красным цветом:

Ошибка: метод Main не найден в классе SomeClass . Определите метод main следующим образом:
public static void main (String [] args)

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

Ответы [ 7 ]

7 голосов
/ 12 ноября 2011

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

public static void main(String[] args) method

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

Вы можете спросить: зачем это нужно? Почему бы просто не выбрать другой основной метод? Ответ в том, что это добавит сложности с 0 преимуществами. Как и сейчас, основная функция выглядит отчетливо. Если вы посмотрите на это, вы знаете, что это тот, который будет вызван. Если будет вызван какой-либо main, вы должны всегда спрашивать себя: является ли main, на которую я смотрю, той, которую нужно вызвать, или есть другая main в этом классе, которая имеет приоритет?

2 голосов
/ 12 ноября 2011

Java-приложение может принимать любое количество аргументов из командной строки. Это позволяет пользователю указывать информацию о конфигурации при запуске приложения. (из Аргументы командной строки ), и, как все остальные сказали здесь, это так!

Ради бога, пожалуйста, не говорите, если мне это не нужно, это никому не нужно! :)

2 голосов
/ 12 ноября 2011

Поскольку

  1. Аргументы командной строки все еще используются , даже многими программами пользовательского интерфейса (вы знали, что Microsoft Outlook поддерживает некоторые очень удобно аргументы командной строки? ) *;и:
  2. Вот как работает Java (TM) .Помимо прочего, это уменьшает сложность как кода (за счет запрета множественных форм и возможного случайного теневого копирования), так и времени выполнения (не нужно выяснять, «какой основной» вызывать).Разрешение вторичной формы без «args» просто добавляет слишком мало.

Удачное кодирование ...


* Да, Outlook не Java.Однако, если в Outlook есть аргументы командной строки, они все равно должны чего-то стоить - это была гипербола; -)

Почти каждая программа пользовательского интерфейса, которая имеет дело с открытием файлов чтения , позволитуказание, какой файл открывать через аргументы командной строки (Gimp, Notepad, Firefox, чтобы назвать несколько других).Среди прочего, это позволяет интегрировать с «двойным щелчком для открытия» элементы в проводнике Windows и т. П.

2 голосов
/ 12 ноября 2011

Краткий ответ: потому что так устроен Java.

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

Тем не менее, часто аргументы командной строки имеют разновидность -D, которую JVM отбрасывает до достижения main. Но это зависит от того, что вы делаете.

0 голосов
/ 08 августа 2018

Поддержка аргументов командной строки в значительной степени стандартна для языков программирования.Даже в этот век графических интерфейсов существует множество скрытых способов запуска программы с аргументами командной строки.Я знаю, что в Windows есть настройки ярлыков для опытных пользователей, где вы можете запустить программу с заданным набором аргументов командной строки, например.

Java также принудительно применяет типы и сигнатуры функций расширений (ищите это в Google, еслиты не знаешь что это такое).Ожидается, что основная функция будет принимать массив строк - если определенная вами основная функция не соответствует сигнатуре этого аргумента (1 аргумент, массив строк), то это вызывает несовместимость.

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

Когда программа запускается, Java специально ищет функцию с именем main с 1 аргументом (String[]).Ваша программа не определяет главную функцию с этой спецификацией аргумента, поэтому этот поиск завершается ошибкой с сообщением об ошибке.

0 голосов
/ 12 ноября 2011

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

0 голосов
/ 12 ноября 2011

На самом деле я понятия не имею, зачем это нужно, кроме как сказать, что это синтаксическое соглашение.Точно так же, как функция (определенная function-name ()) в Lisp / Scheme, или в Ruby есть блоки do..end, синтаксис функции Java Main - String [] args.1002 * Что касается не использования аргументов командной строки, это полностью зависит от программы.Целиком.Я пишу программы на Java все время, которые принимают аргументы командной строки;это просто вопрос того, чего вы пытаетесь достичь.

...