Какие символы допустимы в имени класса Java? Какие еще правила регулируют имена классов Java (например, имена классов Java не могут начинаться с числа)?




У вас может быть практически любой символ, включая большинство символов Юникода! Точное определение находится в Спецификация языка Java в разделе 3.8: Идентификаторы.
An identifier is an unlimited-length sequence of Java letters and Java digits, the first of which must be a Java letter. ...
Letters and digits may be drawn from the entire Unicode character set, ... This allows programmers to use identifiers in their programs that are written in their native languages.
An identifier cannot have the same spelling (Unicode character sequence) as a keyword (§3.9), boolean literal (§3.10.3), or the null literal (§3.10.7), or a compile-time error occurs.
Однако см. этот вопрос, чтобы узнать, следует ли вам это делать.
π as a variable name for pi.
Every programming language has its own set of rules and conventions for the kinds of names that you're allowed to use, and the Java programming language is no different. The rules and conventions for naming your variables can be summarized as follows:
Variable names are case-sensitive. A variable's name can be any legal identifier — an unlimited-length sequence of Unicode letters and digits, beginning with a letter, the dollar sign "$", or the underscore character "_". The convention, however, is to always begin your variable names with a letter, not "$" or "_". Additionally, the dollar sign character, by convention, is never used at all. You may find some situations where auto-generated names will contain the dollar sign, but your variable names should always avoid using it. A similar convention exists for the underscore character; while it's technically legal to begin your variable's name with "_", this practice is discouraged. White space is not permitted.
Subsequent characters may be letters, digits, dollar signs, or underscore characters. Conventions (and common sense) apply to this rule as well. When choosing a name for your variables, use full words instead of cryptic abbreviations. Doing so will make your code easier to read and understand. In many cases it will also make your code self-documenting; fields named cadence, speed, and gear, for example, are much more intuitive than abbreviated versions, such as s, c, and g. Also keep in mind that the name you choose must not be a keyword or reserved word.
If the name you choose consists of only one word, spell that word in all lowercase letters. If it consists of more than one word, capitalize the first letter of each subsequent word. The names gearRatio and currentGear are prime examples of this convention. If your variable stores a constant value, such as
static final int NUM_GEARS = 6, the convention changes slightly, capitalizing every letter and separating subsequent words with the underscore character. By convention, the underscore character is never used elsewhere.
От официальное руководство по Java.
Оператор спрашивал об именах классов, а не об именах переменных!
Я хотел бы добавить к ответу bosnic, что любой действительный символ валюты допустим для идентификатора в Java. th € - это юридический идентификатор, как и € this, и € тоже. Однако я не могу понять, как отредактировать его или ее ответ, поэтому вынужден опубликовать это тривиальное дополнение.
В дополнение к предыдущим ответам стоит отметить, что:
$var1 £var2 €var3
Я считаю, что использование символов валюты происходит из C / C++, где переменные, добавляемые в ваш код компилятором, обычно начинаются с символа «$». Очевидным примером в Java являются имена файлов '.class' для внутренних классов, которые по соглашению имеют формат 'Outer $ Inner.class'.
Сравнивать:
class Employee : public IPayable //C++
с
class Employee : IPayable //C#
и
class Employee implements Payable //Java
private double _salary;
Крошечное меньшинство помещает подчеркивание после имени поля, например.
private double salary_;
«Многие проекты используют соглашение о подчеркивании перед именами полей» .. на каком языке? Java или C++?
Как уже было сказано Джейсоном Коэном, спецификация языка Java определяет, что такое юридический идентификатор, в разделе 3.8:
"Идентификатор - это последовательность букв Java и цифр неограниченной длины, первая из которых должна быть буквой Java. [...] «Буква Java» - это символ, для которого метод Character.isJavaIdentifierStart (int) возвращает значение true. «Буква или цифра Java» - это символ, для которого метод Character.isJavaIdentifierPart (int) возвращает истину ».
Надеюсь, это ответит на ваш второй вопрос. Относительно вашего первого вопроса; И учителя, и (насколько я помню) компиляторы Java учили меня, что имя класса Java должно быть идентификатором, начинающимся с заглавной буквы A-Z, но я не могу найти какой-либо надежный источник по этому поводу. Когда вы пробуете это с OpenJDK, нет предупреждений, когда имена классов начинаются со строчных букв или даже со знака $. Однако при использовании $ -знака его нужно избегать, если вы компилируете из оболочки bash.
Имена классов должны быть существительными в UpperCamelCase, с заглавной первой буквой каждого слова. Используйте целые слова - избегайте акронимов и сокращений (если только аббревиатура не используется гораздо шире, чем длинная форма, например URL или HTML). Соглашения об именах можно прочитать здесь:
http://www.oracle.com/technetwork/java/codeconventions-135099.html
Идентификаторы используются для имен классов, имен методов и имен переменных. Идентификатор может быть любой описательной последовательностью прописных и строчных букв, цифр или знаков подчеркивания и знака доллара. Они не должны начинаться с числа, иначе их нельзя спутать с числовым литералом. Опять же, Java чувствительна к регистру, поэтому VALUE является отличительным признаком, чем Value. Вот несколько примеров действительных идентификаторов:
AvgTemp, count a4, $ test, this_is_ok
Недопустимые имена переменных включают:
2 отсчета, высокотемпературный, Not / ok
What other rules govern Java class names (for instance, Java class names cannot begin with a number)?
возможный дубликат Юридические идентификаторы в Java, потому что docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1 говорит:
class Identifier. Это намного старше, но другой вариант получил больше голосов и более общий: то же самое касается методов, переменных и т. д.