Устаревший синтаксис Java

Считая документ условных обозначений Java с 1997 года, я увидел это в примере на P16 о соглашениях об именах переменных:

int i;
char *cp;
float myWidth;

Второе объявление представляет интерес - для меня это очень похоже на то, как вы можете объявить указатель на C. Он дает синтаксическую ошибку при компиляции под Java 8.

Просто из любопытства: был ли это действительный синтаксис? Если да, что это значит?

Ответ 1

По-моему, это ошибка с копией.

Из JLS 1 (что действительно не так просто найти!), Раздел о локальных объявлениях переменных утверждает, что такое объявление, по сути, является типом, за которым следует идентификатор. Обратите внимание, что нет специальной ссылки на *, но есть специальная ссылка, сделанная о [] (для массивов).

char - наш тип, поэтому единственная возможная возможность заключается в том, что *cp является идентификатором. Раздел "Идентификаторы"

Идентификатор представляет собой неограниченную последовательность букв Java и цифр Java, первая из которых должна быть буквой Java.
...
Буква Java - это символ, для которого метод Character.isJavaLetter(§20.5.17) возвращает true

И JavaDoc для этого метода заявляет:

Символ считается буквой Java тогда и только тогда, когда это буква (§20.5.15) или знак доллара "$" (\u0024) или символ подчеркивания (" \u0024 строка") _ _ (\u005F).

поэтому foo, _foo и $foo были в порядке, но *foo никогда не был действительным.


Если вы хотите получить более современное руководство по стилю Java, руководство по стилю Google, пожалуй, наиболее часто упоминается.

Ответ 2

Похоже, что это общий документ стиля кодирования для C-подобных языков с некоторыми дополнениями для Java. См., Например, также следующую страницу:

Не используйте оператор присваивания в месте, где его можно легко спутать с оператором равенства. Пример:

if (c++ = d++) { // AVOID! Java disallows.
    …
}

Не имеет смысла говорить программисту, чтобы избежать чего-либо, что является синтаксической ошибкой в любом случае, поэтому единственный вывод, который мы можем извлечь из этого, заключается в том, что документ не является на 100% специфичным для Java.

Другая возможность заключается в том, что он предназначен как стиль кодирования для всей системы Java, включая C++ части JRE и JDK.

Обратите внимание, что Sun отказалась от документа стиля кодирования даже задолго до того, как Oracle появился на картинке. Они сдержались, указав язык, а не как его использовать.

Ответ 3

Недопустимый синтаксис!

Это просто ошибка копирования/вставки.

Токен (*) в переменных применим только в C, потому что он использует указатели, тогда как JAVA никогда не использует указатели.

И токен (*) используется только как оператор в JAVA.