Почему Java не показывает ошибку для двойной точки с запятой в конце оператора? - PullRequest
10 голосов
/ 03 марта 2012

Я случайно написал заявление Java с двумя точками с запятой в конце. Компилятор Java не показывает никаких ошибок, и он работает.

Код:

System.out.println("Length after delete the text is "+name.length());;

В целях обучения я попытался добавить разные символы после точки с запятой, и компилятор java показал ошибку времени компиляции как Синтаксическая ошибка на токене ")", удалите этот токен .

Это утверждение:

System.out.println("Length after delete the text is "+name.length());)

Почему Java рассматривает точку с запятой и другие символы как разные?

Ответы [ 6 ]

30 голосов
/ 03 марта 2012

Потому что двойная точка с запятой рассматривается не как двойная точка с запятой, а как точка с запятой плюс пустое выражение. И пустое утверждение, которое ничего не делает, не является ошибкой.

15 голосов
/ 03 марта 2012

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

На самом деле, есть случаи, когда двойная точка с запятой выдает ошибку:

public int method() {
   return 1;;
}

Когда компилятор определяет, что местоположение недоступно (и это определено точно в JLS, но включает расположения непосредственно после return, break, continue и throw), оператор там разрешено, даже не пустое.

10 голосов
/ 03 марта 2012

Согласно стандарту языка Java, вторая точка с запятой - это пустое выражение .

Пустое выражение ничего не делает.

EmptyStatement:
    ;

Выполнение пустого оператора всегда завершается нормально.

1 голос
/ 03 марта 2012

Точка с запятой заканчивает предложение.

System.out.println("Length after delete the text is "+name.length());;

Вторая точка с запятой означает, что предложение пустое.

System.out.println("Length after delete the text is "+name.length());)

Неправильно, потому что вы пытаетесь закончить незаконченное предложение.

1 голос
/ 03 марта 2012

; сам по себе пустой оператор, поэтому в исходном случае у вас фактически есть два оператора.

0 голосов
/ 03 марта 2012

Потому что это не ошибка? Почему вы спрашиваете о Java? Это в большинстве языков с похожим синтаксисом ...

...