2015-03-16 6 views
0

Синтаксически корректно иметь java-класс, заканчивающийся на; В большинстве документов синтаксис класса java не заканчивается;синтаксис для написания java-класса

Однако я успешно скомпилировать ниже код,

public class ClassDemo { 
    public static void main (String args[]) { 
     System.out.println ("Hello World!"); 
    } 
}; 

Мой вопрос, это правильно, чтобы закончить объявление класса с ;? Почему он игнорируется компилятором и, кажется, безразличен, есть ли в конце концов ;?

+2

Что вы хотите сказать? – Sybren

+2

Это условие может быть предоставлено компилятором языка Java из-за анонимных классов, которые должны быть необходимы; – IndoKnight

+0

простая логика, если вы получаете какую-либо ошибку компиляции, тогда ее неправильно, если вы не получите ошибку, тогда вы правы. Таким образом, * Однако я успешно скомпилировать ниже кода, * означает, что вы правы – SpringLearner

ответ

0

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

4

Ваш код верный по синтаксису, но ; не нужен.

От JLS 7.6.

Экстра ";" токены, появляющиеся на уровне деклараций типа в блоке компиляции , не влияют на значение компиляции . Брейковые точки с запятой разрешены на языке программирования Java исключительно как уступка программистам на С ++, которые используются для размещения «;» после объявления класса. Они не должны использоваться в новом Java-коде.

+0

разве это не лучше всего подходит для комментариев? – SpringLearner

+0

@SpringLearner Первоначально да. Но я обновлял свой ответ –

0

Его просто терминатор, поэтому, если вы включаете в любое место и любое количество раз, то это не влияет на вашу программу.

0

";" токены, появляющиеся на уровне деклараций типа в компиляционной единице, не влияют на значение единицы компиляции. Таким образом, его дополнительный вариант.

0

Я думаю, что вы исходите из фона, такого как javascript. В javascript это хорошая практика, чтобы закончить ваш класс/метод/скрипты с помощью ;. Потому что, если вы этого не сделаете, это вызывает проблему для другого загружаемого javacript после этого, так как предполагается, что это продолжение части более раннего скрипта.

Однако в классе java защита заканчивается }. Все, что после этого не будет частью этого класса и не будет выпущено для компилятора.

Фактически, вы можете иметь столько ; в любой строке java. Это не имеет никакого значения для java-компилятора.

0

класса Java заканчиваются точкой с запятой (;)

В компьютерном программировании, точка с запятой, часто используется для разделения нескольких операторов (например, в Perl, Pascal, PL/I и SQL; см Pascal : Секунды как разделители операторов). В других языках точки с запятой называются терминаторами и требуются после каждого утверждения (например, в Java и семействе C). Сегодня точки с запятой как терминаторы (или точки с запятой) в значительной степени выиграли, но это было спорным вопросом в языках программирования с 1960-х по 1980-е годы. В этом дебатном и часто цитируемом исследовании в этой дискуссии был Gannon & Horning (1975), который завершил сильно в пользу точки с запятой в качестве терминатора:

Наиболее важным было то, что точка с запятой в качестве терминатора утверждения была лучше, чем точка с запятой в качестве разделителя операторов. Чтобы JAVA рассматривал конец класса с (;) как терминатором класса. если вы поместите другие знаки препинания как., или компилятор букв через ошибку

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