2015-10-31 3 views
0

Я не спрашиваю, что такое (String args[]), потому что здесь был дан ответ: What is "String args[]"? parameter in main method Java.Зачем нужен параметр `String [] args` как main()?

Мой вопрос в том, почему нужно писать его при написании main()?

У меня были практические экзамены, где я столкнулся с проблемой и понял, что не писал String args[] при написании public static void main(). Но затем после написания main(String args[]) проблема была решена. (Как и почему я до сих пор не знаю!)

В тот же день меня попросили в Виве спросить: «Нужно ли писать это String args[] при написании main()?» и благодаря произошедшей ошибке я ответил «ДА», но остался без ответа, когда его спросили «ПОЧЕМУ?».
Итак, я хочу знать , почему нужно писать String [] args.

+0

Проверить [он re] (http://stackoverflow.com/questions/890966/what-is-string-args-parameter-in-main-method-java) – sam

+0

Ключевое слово применимо к методу. –

+2

Обратите внимание, что вы также можете написать 'String ... args' –

ответ

2

От Java Language Specification 12.1.4

метод main должен быть объявлен public, static и void. Он должен указать формальный параметр (§8.4.1), объявленным типом которого является массив из String. Таким образом, одно из следующих заявлений приемлемо:

public static void main(String[] args)

public static void main(String... args)

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

Итак, когда вы выполняете команду как

java YourClass foo bar 

виртуальной машины Java поместит foo и bar параметры String[] массива и попытается передать этот массив main метод, который может принять его в качестве параметра.

Этот метод также используется, когда команда не имеет аргументов, как

java YourType 

Это решение упрощает нашу жизнь, потому что мы не должны сосредоточиться на рассмотрении дел, где есть две точки входа

  • один для команды с аргументами
  • и тот, где команда не имеет аргументов.

Мы можем просто разрешить пользователю передавать аргументы, но если мы не будем обрабатывать их, мы можем просто игнорировать их.

Также помните, что нам разрешено иметь в нашем классе любой метод, который имеет надлежащее объявление (и не нарушает каких-либо правил, унаследованных от суперкласса, например, расширяя видимость элементов), поэтому мы не можем сделать защищенный метод общедоступным), поэтому существует ничего плохого в том,

public static void main(){ 
    /*your code*/ 
} 

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

public static void main(String ...){ 
    main(); 
} 
1

Это аргументы команды. Без них JVM должен был бы выполнить проверку, чтобы проверить, содержит ли метод аргументы, прежде чем пытаться вызвать метод, определив, может ли он сделать main() или main(args) (два синтаксически корректных метода с разными способами их вызова)

1

В Java точка входа должна быть public static void main(String[]). Это просто то, что вызывается при запуске своего класса. Метод main() без аргументов не будет вызываться. Если у вас нет аргументов в вашей команде, вы просто вызываете main(String[]) с массивом длиной 0.

Чтобы решить вопрос Viva, идентификатор параметра используется только компилятором и может быть изменен вместе с альтернативным размещением [] или с использованием String... для указания массива. Так что, как представляется, формальность, но вы можете использовать любой из следующих действий:

  1. public static void main(String[] args)
  2. public static void main(String args[])
  3. public static void main(String... args)
  4. public static void main(String[] custom_identifier)
  5. public static void main(String custom_identifier[])
  6. public static void main(String... custom_identifier)
+0

Спасибо, что указали на все возможные способы написания деклараций «main()»! Помогли! – abhishah901

Смежные вопросы