В чем смысл $в имени переменной?

Недавно я прочитал, что знак $разрешен в именах переменных Java, но имеет особое значение. К сожалению, не упоминается, каково это особое значение.

Поэтому я спрашиваю здесь: Каково особое значение $в именах переменных в Java?

Вот точная цитата из

Java: введение в решение проблем и программирование

от Уолтера Савича:

Java действительно позволяет символу знака доллара $появляться в идентификаторе, но эти идентификаторы имеют особое значение, поэтому вы не должны использовать символ $в ваших идентификаторах.

Ответ 1

$ используется внутри компилятором для украшения определенных имен. Wikipedia дает следующий пример:

public class foo {
    class bar {
        public int x;
    }

    public void zark () {
        Object f = new Object () {
            public String toString() {
                return "hello";
            }
        };
    }
}

Компиляция этой программы приведет к созданию трех файлов .class:

  • foo.class, содержащий основной (внешний) класс foo
  • foo$bar.class содержащий именованный внутренний класс foo.bar
  • foo$1.class, содержащий анонимный внутренний класс (локальный метод foo.zark)

Все эти имена классов действительны (поскольку в спецификации JVM допускаются символы $).

В том же ключе javac использует $ в некоторых автоматически генерируемых именах : например, this$0 и др. используются для неявных ссылок this из внутреннего классы для их внешних классов.

Наконец, JLS рекомендует следующее:

Символ $ следует использовать только в механически сгенерированном источнике кода или, реже, для доступа к существующим именам в устаревших системах.

Ответ 2

нет специального значения для него:

"Имена переменных относятся к регистру. Имя переменной может быть любым юридическим идентификатором - бесконечной последовательностью букв и цифр Unicode, начиная с буквы, знака доллара" $"или символа подчеркивания" _ ", Однако соглашение состоит в том, чтобы всегда начинать имена переменных с буквы, а не" $"или" _ ". Кроме того, символ знака доллара по соглашению никогда не используется вообще. Вы можете найти некоторые ситуации, сгенерированные имена будут содержать знак доллара, но ваши имена переменных всегда должны избегать его использования. Аналогичное соглашение существует для символа подчеркивания, хотя технически законно начинать свое имя переменной с" _ ", эта практика не рекомендуется. разрешено".