2010-03-21 3 views
7

Должен ли быть какой-то конкретный порядок, в котором я должен написать следующее для основного метода Java?Java - public static void main()

public static void main()

Другими словами, я могу перетасовка общественности, статичны, аннулированию в любом порядке?

Почему или почему нет?

+24

Вы задаете много этих вопросов в очень быстрой последовательности. Я рекомендую вам прочитать спецификацию языка Java (http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html), которая ответит на многие из этих запросов. Некоторые эксперименты с вашим компилятором также будут полезны. –

+8

@ Джон Фэминелла - Приятно видеть, что кто-то может признать, что ОП задал много вопросов, которые вводят в природу, но каким-то образом способен противостоять инфантильному побуждению сделать snarky, важный для себя комментарий. Ваш комментарий был классным и полезным - браво! –

+1

@ John: Спасибо за предложение. Сделаем это. –

ответ

18

void - тип возврата, поэтому он должен уходить последним. Другие могут быть перетасованы (см. section 8.4 of the Java Language Specification для получения более подробной информации об этом), но по соглашению модификатор доступа обычно проходит перед большинством других модификаторов метода, за исключением аннотаций, которые обычно идут сначала (опять же, только по соглашению).

+0

[JLS 8.4.3] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html # jls-8.4.3): * «Если в объявлении метода появляются два или более модификатора метода, это обычно, хотя и не обязательно, что они отображаются в порядке, соответствующем показанному: «* Annotation' public' 'protected'' private' 'abstract'' static' 'final'' synchronized' 'native'' strictfp' – Andreas

1

Вкратце, НЕТ, вы не можете Имя метода должно быть немедленно префиксным типом возвращаемого метода. Это часть подписи метода. Однако наличие спецификатора доступа является условным.

1

Подпись для основных потребностей быть:

 
public static void main(String[] args){ 
    // Insert code here 
} 

Однако не существует никаких требований, что один метод быть помещен перед другим способом. Они могут быть в любом порядке. Кроме того, Java использует двухпроходный механизм, так что даже если вы используете какой-либо другой метод в своем «основном» методе, этот метод может фактически отображаться позже в файле. Нет необходимости в форвардной декларации, как в C и C++, из-за этого многопроходного подхода, принятого Java.

Модификаторы public и static могут быть перетасованы; однако, по соглашению, модификатор доступа (открытый, закрытый, защищенный) всегда указывается первым, статическим и/или окончательным (если применимо) даются следующие, за которым следует возвращаемый тип.

+0

Вы в замешательстве. Он спрашивает о порядке «публичных» «статических» «пустот» и «главных» –

+0

@ Кевин, да, я вижу. Теперь я ответил на оба. –

+0

На самом деле String [] также может быть String ... – whiskeysierra

1

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

3

Мы можем написать, мы можем поменять местами static и public

static public void main(String args[]) 

static public void main(String... args) 

Однако вы не можете переставить тип возвращаемого с любой позиции, например, дл

public void static main(String[] args) // is wrong 

, а также

static void public main(String[] args) // is also wrong 
+0

Быстрый вопрос java, можете ли вы сделать static static void main() 'без' String args [] 'или' String ... args' или это вообще обескураживает? – hellyale

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