旧版Java语法

Har*_*ing 34 java legacy

从1997年开始阅读Java代码约定文档,我在P16的一个例子中看到了关于变量命名约定的内容:

int i;
char *cp;
float myWidth;
Run Code Online (Sandbox Code Playgroud)

第二个声明是有意义的 - 对我而言,它看起来很像你可能在C中声明一个指针.它在Java 8下编译时会出现语法错误.

只是出于好奇:这是有效的语法吗?如果是这样,那是什么意思?

Mic*_*ael 25

我想这是一个复制粘贴错误.

从JLS 1(这真的不容易找到!),局部变量声明部分声明这样的声明本质上是一个后跟标识符的类型.请注意,没有特别的参考*,但有关于[](对于数组)的特殊参考.

char是我们的类型,所以剩下的唯一可能性*cp是标识符.关于标识符部分说明

标识符是无限长度的Java字母和Java数字序列,第一个必须是Java字母.
...
Java字母是Character.isJavaLetter(第20.5.17节)方法返回true的字符

该方法的JavaDoc规定:

当且仅当字符是字母(第20.5.15节)或美元符号字符'$'(\u0024)或下划线("低行")字符'_'(\u005F)时,字符才被视为Java字母.

所以foo,_foo并且$foo很好,但*foo从未有效.


如果您想要更新的Java风格指南,Google的风格指南可以说是最常被引用的.


Jör*_*tag 5

看起来这是一个用于类C语言的通用编码样式文档,其中包含一些特定于Java的附加内容.例如,请参见下一页:

不要在可能容易与等于运算符混淆的地方使用赋值运算符.例:

if (c++ = d++) { // AVOID! Java disallows.
    …
}
Run Code Online (Sandbox Code Playgroud)

告诉程序员无论如何都要避免出现语法错误是没有意义的,因此我们可以从中得出的唯一结论是该文档不是100%特定于Java的.

另一种可能性是它是整个Java系统的编码风格,包括JRE和JDK的C++部分.

请注意,在Oracle进入图片之前,Sun就放弃了编码风格文档.他们限制自己指定语言什么,而不是如何使用它.