Недавно я прочитал, что знак $ разрешен в именах переменных Java, но имеет особое значение. К сожалению, не указано, в чем заключается это особое значение.
Поэтому я спрашиваю здесь: каково особое значение $ в именах переменных в Java?
Вот точная цитата из
Java: введение в решение задач и программирование
от Уолтера Сэвича:
Java действительно допускает появление символа доллара $ в идентификаторе, но эти идентификаторы имеют особое значение, поэтому вам не следует использовать символ $ в своих идентификаторах.
Переведено автоматически
Ответ 1
$ используется компилятором внутренне для оформления определенных имен. Википедия приводит следующий пример:
При компиляции этой программы будут созданы три файла .class:
foo.class, содержащий основной (внешний) класс foo
foo$bar.class, содержащий именованный внутренний класс foo.bar
foo$1.class, содержащий анонимный внутренний класс (локальный для метода foo.zark)
Все эти имена классов допустимы (поскольку $ символы разрешены в спецификации JVM).
Аналогичным образом, javac используется $ в некоторых автоматически генерируемых именах переменных: например, this$0 и др. используются для неявных this ссылок из внутренних классов на их внешние классы.
Символ $ следует использовать только в механически сгенерированном исходном коде или, в редких случаях, для доступа к уже существующим именам в устаревших системах.
Ответ 2
В имени переменной нет особого значения для $.
Хотя технически это разрешено, начало имени переменной со знака доллара противоречит соглашению, обычно используемому только генераторами кода.
Имена переменных чувствительны к регистру. Именем переменной может быть любой разрешенный идентификатор — последовательность букв и цифр Unicode неограниченной длины, начинающаяся с буквы, знака доллара "$" или символа подчеркивания "_". Однако по соглашению имена переменных всегда должны начинаться с буквы, а не с "$" или "_". Кроме того, символ знака доллара, по соглашению, вообще никогда не используется. Вы можете столкнуться с некоторыми ситуациями, когда автоматически сгенерированные имена будут содержать знак доллара, но в именах переменных всегда следует избегать его использования. Аналогичное соглашение существует для символа подчеркивания; хотя технически законно начинать имя вашей переменной с "_", эта практика не рекомендуется. Пробелы не допускаются.