Что такое «строковые аргументы []»? параметр в основном методе Java

315

Я только начинаю писать программы на Java. Что означает следующий код Java?

public static void main(String[] args)
  • Что такое String[] args?

  • Когда бы вы использовали это args?

Исходный код и / или примеры предпочтительнее абстрактных пояснений

freddiefujiwara
источник

Ответы:

302

В Java argsсодержатся предоставленные аргументы командной строки в виде массива Stringобъектов.

Другими словами, если вы запустите вашу программу, как java MyProgram one twoтогда argsбудет содержать ["one", "two"].

Если вы хотите вывести содержимое args, вы можете просто просмотреть их, как это ...

public class ArgumentExample {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}
Дэн Лью
источник
51
Стоит отметить, что argsэто не обязательно должно быть названо args(вы можете назвать его как угодно) - хотя лучше следовать соглашению. Вы также можете String... argsвремя от времени видеть , что эквивалентно.
Викингстев
68
индексация аргументов начинается с 0. (в отличие от C, дающего вам название программы)
AdrieanKhisbe
1
@Daniel, argsгарантированно разделяется пробелом независимо от ОС?
Pacerier
@Pacerier извините, я сильно опоздал и у меня нет источника, но я твердо верю, что они есть. Мне кажется, что java (.exe) обрабатывает аргументы, а не базовую оболочку / терминал. Взять, -versionк примеру, это java -versionи java.exe -version, но нет java.exe /version(пытается загрузить основной класс .version). Просто мои 2 цента, если кто-нибудь когда-нибудь на это наткнется.
Люк
1
@ Luke Это не может быть правдой, по крайней мере, в системах Unix. Там оболочка передает аргументы программе, уже разделенной в соответствии с правилами оболочки (с соответствующим удалением цитирования / экранирования). Для программы (в данном случае для интерпретатора java) нет способа получить доступ к исходной нерасщепленной командной строке, и при этом она не должна этого делать, потому что это может запутать пользователя.
Regnarg
112

Это для аргументов командной строки в Java.

Другими словами, если вы запустите

MyProgram Java один два

Затем argsсодержит:

[ "один два" ]

public static void main(String [] args) {
    String one = args[0]; //=="one"
    String two = args[1]; //=="two"
}

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


Если вы новичок в Java, я настоятельно рекомендую читать через официальный Oracle, Java TM учебники .

mR_fr0g
источник
45

argsсодержит аргументы командной строки, передаваемые программе Java при вызове. Например, если я вызову программу так:

$ java MyProg -f file.txt

Тогда argsбудет массив, содержащий строки "-f"и "file.txt".

mipadi
источник
Спасибо за ответ.
Chaklader Асфак Арефе
Я должен был сначала скомпилировать свой код, javac MyProg.javaа затем запустить java MyProg -f file.txt. Есть ли причина для этого, потому что нигде в ответах это не упоминается?
Станимирсп
@stanimirsp: сначала нужно скомпилировать исходный код Java в .classфайл.
Мипади
19

Следующий ответ основан на моем понимании и некотором тесте.

Что такое String [] args?

Ans->

String [] -> Как мы знаем, это простой массив String.

args -> это имя массива, это может быть что угодно (например, a, ar, аргумент, параметр, параметр), нет проблем с компилятором и выполнено, и я также проверил.

Например,
1) public static void main (аргумент String [])

2) открытый статический void main (параметр String [])

Когда бы вы использовали эти аргументы?

Ans->

Основная функция разработана очень разумно разработчиками. Фактическое мышление очень глубоко. Который в основном разрабатывается на основе C & C ++ на основе аргумента командной строки, но в настоящее время никто не использует его больше.

Вещи 1 - Пользователь может ввести любой тип данных из командной строки, может быть Number или String, и это необходимо для того, чтобы компилятор принял их, какой тип данных нам следует использовать? увидеть вещь 2

Thing 2 - String - это тип данных, который поддерживает все примитивные типы данных, такие как int, long, float, double, byte, shot, char в Java. Вы можете легко разобрать его в любом примитивном типе данных.

Например, следующая программа скомпилирована и выполнена, и я также протестировал.

Если ввод -> 1 1

// one class needs to have a main() method
public class HelloWorld
{
  // arguments are passed using the text field below this editor
  public static void main(String[] parameter)
  {    
System.out.println(parameter[0] + parameter[1]); // Output is 11

//Comment out below code in case of String
    System.out.println(Integer.parseInt(parameter[0]) + Integer.parseInt(parameter[1])); //Output is 2
    System.out.println(Float.parseFloat(parameter[0]) + Float.parseFloat(parameter[1])); //Output is 2.0    
    System.out.println(Long.parseLong(parameter[0]) + Long.parseLong(parameter[1])); //Output is 2    
    System.out.println(Double.parseDouble(parameter[0]) + Double.parseDouble(parameter[1])); //Output is 2.0    

  }
}
Ajinkya
источник
13

Даже если OP только говорит о String[] args, я хочу привести полный пример public static void main(String[] args).

Public: модификатор доступа , который определяет, кто может получить доступ к этому методу. Открытый означает, что этот метод будет доступен любому классу (если другие классы могут получить доступ к этому классу.).

Static: ключевое слово, которое идентифицирует предмет, связанный с классом. Это означает, что данный метод или переменная не связаны с экземпляром, а связаны с классом. Доступ к нему можно получить без создания экземпляра класса.

Void: используется для определения типа возврата метода. Он определяет, что метод может вернуть. Void означает, что метод не будет возвращать никакого значения.

main: это имя метода. Это имя метода ищется JVM как отправная точка для приложения только с определенной подписью.

String[] args : параметр основного метода.

Если вы посмотрите на исходный код JDK (jdk-src \ j2se \ src \ share \ bin \ java.c):

/* Get the application's main method */
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
                   "([Ljava/lang/String;)V");
...
{    /* Make sure the main method is public */
...
mods = (*env)->CallIntMethod(env, obj, mid);
if ((mods & 1) == 0) { /* if (!Modifier.isPublic(mods)) ... */
    message = "Main method not public.";
    messageDest = JNI_TRUE;
    goto leave;
...

Вы можете видеть, что метод запуска в Java должен быть назван mainи должен иметь конкретную подписьpublic static void main(String[] args)

Код также говорит нам, что public static void main(String[] args)это не исправлено, если вы измените код в (jdk-src \ j2se \ src \ share \ bin \ java.c) на другую подпись, это будет работать, но изменение этого даст вам другие возможные проблемы из-за спецификаций Java

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

Igoranze
источник
12

String [] args это также, как вы объявляете массив строк в Java.

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

public void foo() {
    String [] args = new String[2];
    args[0] = "hello";
    args[1] = "every";

    System.out.println("Output: " + args[0] + args[1]);

    // etc... the usage of 'args' here and in the main method is identical
}
Cuga
источник
12

Я бы расстался

public static void main(String args[])

по частям.

«public» означает, что main () может быть вызван из любого места.

«static» означает, что main () не принадлежит конкретному объекту

«void» означает, что main () не возвращает значения

«main» - это имя функции. main () является особенным, потому что это начало программы.

«Строка []» означает массив строк.

«args» - это имя String [] (в теле main ()). «args» не является особенным; Вы можете назвать это как-нибудь еще, и программа будет работать так же.

  • String[] argsпредставляет собой набор строк, разделенных пробелом, который может быть введен в программу на терминале. В большинстве случаев новичок не собирается использовать эту переменную, но она всегда есть на всякий случай.
Джаймин Патель
источник
9

Когда вы закончите свой код, вы превратите его в файл с расширением .java, который можно запустить, дважды щелкнув по нему, но также по всей консоли (терминал на Mac, cmd.exe на окнах), который позволяет пользователю делать много вещей. Одна вещь - они могут видеть консольные сообщения (System.out.print или System.out.println), которые они не могут видеть, если они дважды щелкают. Еще одна вещь, которую они могут сделать, это указать параметры, поэтому обычно вы используете строку

java -jar MyCode.jar

после перехода в папку программы с

cd C:My/Code/Location

на окнах или

cd My/Code/Location

на Mac (обратите внимание, что Mac менее громоздкий) для запуска кода, но для указания параметров, которые вы бы использовали

java -jar MyCode.jar parameter1 parameter2

Эти параметры хранятся в массиве args, который вы можете использовать в своей программе, если вы хотите, чтобы пользователь мог контролировать специальные параметры, такие как используемый файл или объем памяти, который может иметь программа. Если вы хотите знать, как использовать массив, вы можете найти тему на этом сайте или просто погуглить. Обратите внимание, что можно использовать любое количество параметров.

Zac
источник
9

Объяснение на простом непрофессиональном языке.

Основной метод ожидает от нас предоставления некоторых аргументов, когда мы направляем нашу JVM на имя класса. Это означает, что ваш файл называется Try.java, теперь для его выполнения в командной строке вы пишете «javac Try.java» для компиляции, а затем «java Try» для выполнения. Теперь предположим, что вместо написания просто «java Try» вы пишете «java Try 1». Здесь вы передали аргумент "1". Это будет принято вашим основным методом, даже если вы не используете его в своем коде.

Если вы хотите проверить, принял ли ваш метод main аргумент «1» или нет. Просто, внутри вашего основного метода введите следующее:

for(int i = 0; i < args.length; i++) {
        System.out.println("Argument is: "+args[i]);
    }
Джатин Лалвани
источник
7

Я думаю, что это довольно хорошо охвачено ответами выше, String args[]это просто массив строковых аргументов, которые вы можете передать своему приложению при запуске. В завершение я мог бы добавить, что также допустимо определять параметр метода, передаваемый mainметоду, в качестве аргумента переменной (varargs) типа String:

public static void main (String... args)

Другими словами, mainметод должен принимать либо String array ( String args[]), либо varargs ( String... args) в качестве аргумента метода. И нет никакого волшебства с именем argsтоже. Вы также можете написать argumentsили даже freddiefujiwaraкак показано ниже, например:

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)

sedeh
источник
6

Когда класс java выполняется из консоли, вызывается метод main. Чтобы это произошло, определение этого основного метода должно быть

public static void main(String [])

Тот факт, что этот массив строк называется args, является стандартным соглашением, но не является строго обязательным. Вы должны заполнить этот массив в командной строке, когда вы вызываете вашу программу

java MyClass a b c

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

shsteimer
источник
6

в public static void main (String args []) args - это массив аргументов консольной строки, тип данных которых - String. в этом массиве вы можете хранить различные строковые аргументы, вызывая их в командной строке, как показано ниже: java myProgram Shaan Royal, затем Shaan и Royal будут сохранены в массиве как arg [0] = "Shaan"; Arg [1] = "Royal"; Вы можете сделать это вручную также внутри программы, когда вы не вызываете их в командной строке.

Shaan Royal
источник
3

Стиль dataType[] arrayRefVarявляется предпочтительным. Стиль dataType arrayRefVar[]происходит от языка C / C ++ и был принят в Java для поддержки программистов на C / C ++.

Джеральд
источник
1

String[] argsПараметр представляет собой массив строк , передаваемых в качестве параметров при запуске приложения с помощью командной строки в ОС.

Итак, представьте, что вы скомпилировали и упаковали myApp.jarприложение Java. Конечно, вы можете запустить свое приложение, дважды щелкнув его в ОС, но вы также можете запустить его с помощью командной строки, например (в Linux, например):

user@computer:~$ java -jar myApp.jar

Когда вы вызываете ваше приложение, передавая некоторые параметры, такие как:

user@computer:~$ java -jar myApp.jar update notify

Команда java -jarпередаст ваши строки updateи notifyваш public static void main()метод.

Затем вы можете сделать что-то вроде:

System.out.println(args[0]); //Which will print 'update'
System.out.println(args[1]); //Which will print 'notify'
Сэр Бетховен
источник
0

В дополнение ко всем предыдущим комментариям.

public static void main(String[] args) 

можно записать как

 public static void main(String...arg)

или

 public static void main(String...strings)
Рахул Ананд
источник