Що таке "String args []"? параметр в основному методі Java


315

Я тільки починаю писати програми на Java. Що означає наступний код Java?

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

  • Коли ви використовуєте їх args?

Вихідний код та / або приклади віддають перевагу над абстрактними поясненнями

Відповіді:


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час від часу бачити , що рівнозначно.
vikingsteve

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.

Іншими словами, якщо ти біжиш

java MyProgram один два

Потім argsмістить:

[ "один два" ]

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

Причиною цього є те, що налаштувати додаток на певний спосіб або надати йому інформацію, яка йому потрібна.


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


45

argsмістить аргументи командного рядка, передані програмі Java після виклику. Наприклад, якщо я викликаю програму так:

$ java MyProg -f file.txt

Тоді argsбуде масив, що містить рядки "-f"та "file.txt".


Дякую за відповідь.
Chaklader Asfak Arefe

Мені довелося спершу скомпонувати свій код javac MyProg.javaта запустити його java MyProg -f file.txt. Чи є в цьому причина, адже ніде у відповідях не згадується?
stanimirsp

@stanimirsp: Вам потрібно спершу скомпілювати вихідний код Java у .classфайл.
mipadi

19

Наступна відповідь ґрунтується на моєму розумінні та деякому тесті.

Що таке аргументи String []?

Відповідь>

String [] -> Як нам відомо, це простий масив String.

args -> - це ім'я масиву, він може бути будь-яким (наприклад, a, ar, аргумент, param, параметр). Немає проблем із компілятором і виконаним & я також перевірений.

Напр.
1) загальнодоступний статичний недійсний головний (аргумент String [])

2) загальнодоступний статичний недійсний основний (параметр String [])

Коли ви використовуєте ці аргументи?

Відповідь>

Основна функція розробляється дуже розумно розробниками. Актуальне мислення дуже глибоке. Який в основному розробляється під час розгляду C & C ++ на основі аргументу командного рядка, але нині його більше ніхто не використовує.

Річ 1- Користувач може вводити будь-який тип даних з командного рядка, може бути Число або Рядок, і необхідно, щоб його прийняв компілятор, який тип даних нам слід використовувати? див. річ 2

Річ 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    

  }
}

13

Навіть тому, що ОП говорить лише про те String[] args, я хочу навести повний приклад public static void main(String[] args).

Public: - це модифікатор доступу , який визначає, хто може отримати доступ до цього методу. Громадський означає, що цей метод буде доступний будь-якому класу (якщо інші класи можуть отримати доступ до цього класу.)

Static: - ключове слово, яке ідентифікує річ, пов’язану з класом. Це означає, що даний метод або змінна пов'язана не з екземплярами, а з класом. До нього можна отримати доступ, не створюючи примірник класу.

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 років з того часу, як ОП задало це питання, я гадаю, що ОП вже може відповісти на власне запитання.


12

String [] args це також те, як ви оголошуєте масив Strings на 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
}

12

Я б розпався

public static void main(String args[])

по частинах.

"загальнодоступний" означає, що main () можна викликати з будь-якого місця.

"статичний" означає, що main () не належить конкретному об'єкту

"void" означає, що main () не повертає значення

"main" - це назва функції. main () є особливим, оскільки це початок програми.

"String []" означає масив String.

"args" - це назва String [] (в тілі main ()). "арги" не особливі; Ви можете назвати це ще чим-небудь, і програма працюватиме так само.

  • String[] argsце сукупність рядків, розділених пробілом, який можна набрати в програму на терміналі. Більше разів початківець не збирається використовувати цю змінну, але вона завжди є на всякий випадок.

9

Коли ви закінчите свій код, ви перетворите його на файл із розширенням .java, який можна запустити подвійним клацанням по ньому, а також на всій консолі (термінал на mac, cmd.exe у Windows), що дозволяє користувачеві робити багато речей. Одна річ - вони можуть бачити консольні повідомлення (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

Ці параметри, що зберігаються в масиві аргументів, які ви можете використовувати у своїй програмі, це те, що ви хочете дозволити користувачеві контролювати спеціальні параметри, наприклад, який файл використовувати або скільки пам'яті може мати програма. Якщо ви хочете знати, як використовувати масив, ви, ймовірно, можете знайти тему на цьому веб-сайті або просто переглянути його в Google. Зауважте, що будь-яка кількість параметрів може бути використана.


9

Пояснення простою мовою мирян.

Основний метод очікує, що ми надамо деякі аргументи, коли ми спрямовуємо свій JVM до імені класу. Це означає, що припустимо, що ваше ім’я є Try.java, тепер для виконання цього в командному рядку ви пишете "javac Try.java" для компіляції, а потім "java Try" для виконання. Тепер припустимо, що замість того, щоб просто писати "Спробуйте Java", ви напишете "Спробуйте java 1". Тут ви передали аргумент "1". Це буде прийнято вашим основним методом, навіть якщо ви не використовуєте його у своєму коді.

Якщо ви хочете перевірити, чи ваш основний метод насправді прийняв аргумент "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 масив ( String args[]), або varargs ( String... args), як аргумент методу. І магії з ім'ям argsтеж немає. Ви також можете написати argumentsабо навіть, freddiefujiwaraяк показано нижче, наприклад:

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)


6

Коли клас java виконується з консолі, основним методом є те, що називається. Для того, щоб це відбулося, визначення цього основного методу має бути

public static void main(String [])

Те, що цей рядковий масив називається args, є стандартною умовою, але не є строго необхідною. Ви будете заповнювати цей масив у командному рядку під час виклику програми

java MyClass a b c

Вони зазвичай використовуються для визначення параметрів вашої програми, наприклад файлів для запису чи читання з них.


6

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


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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.