Я понимаю, почему идентификаторы не могут начинаться с цифр или '-'.Почему нельзя использовать '#', '.', ':' В идентификаторах?
Почему нельзя «#», «.» (точка), а ':' (двоеточие) используется как часть идентификатора?
Я понимаю, почему идентификаторы не могут начинаться с цифр или '-'.Почему нельзя использовать '#', '.', ':' В идентификаторах?
Почему нельзя «#», «.» (точка), а ':' (двоеточие) используется как часть идентификатора?
«Не должно» нет и точное определение. Лучше использовать «не должно» или «не может».
Как только мы изменили вопрос, мы можем ответить на него. Причина в том, что таким образом определяется язык программирования Java. Итак, вы можете: «Почему создатели java определили такие правила?»
Может быть несколько ответов. Одним из наиболее важных (IMHO) является то, что все языки программирования (по крайней мере, те, что я знаю) имеют более или менее равное определение того, какие символы могут использоваться в идентификаторах:
Письма, цифры или символы подчеркивания, начиная с буквы или нижнее подчеркивание.
К слову, java расширяет это правило, потому что оно позволяет использовать любую букву, включая национальные алфавиты, в то время как обычно другие (по крайней мере более старые) языки программирования ограничивают это только латинскими буквами.
Среди всех персонажей, которые вы написали, я думаю, что только #
может быть теоретически включен в список символов, разрешенных для идентификаторов, но они решили не делать этого, вероятно, думая о будущих версиях Явы, где вероятно этот персонаж станет частью языка.
Я считаю, что использование ,
и ;
в идентификаторе, очевидно, невозможно. Подумайте о for
оператора.
От Java Language Specification:
Идентификатор представляет собой последовательность неограниченной длины Java букв и цифр, Java первая из которых должна быть буква Java.
... «Письмо Java» - это символ, для которого метод
Character.isJavaIdentifierStart(int)
возвращает true.
Это не буквы Java, поэтому вы не можете начать с них. $
-, но это использование более сдержанно для внутренних классов.
Я думаю, вопрос в том, почему JLS говорит, что вы не можете. – immibis
Вы не можете использовать какой-либо charecter, зарезервированный для JVM, который идентифицирует этот charecter как разделители. это в основном то же самое, что использование «нового» ключевого слова как имя переменной, что является незаконной операцией в Java.
Потому что ваш код не будет компилироваться? Обратите внимание: цифры могут быть частью идентификаторов. Я не знаю, откуда у вас это правило. Также подумайте, могут ли точки быть частью идентификаторов. Что бы этот код сделал: 'foo.bar.baz.hello()'? может ли быть полем foo? или будет foo.bar быть переменной? –
Потому что они не разрешены, поскольку они не были разрешены в C, на котором была основана Java. В некоторых случаях они могли бы разрешить '#', хотя он зарезервирован для будущего использования, но '.' и': 'имеют специальные значения в Java. –
Потому что JLS Says So (tm) – fge