传统 Java 语法

2022-09-01 07:48:55

阅读 1997 年的 Java 代码约定文档,我在 P16 上关于变量命名约定的示例中看到了这一点:

int i;
char *cp;
float myWidth;

第二个声明很有趣 - 对我来说,它看起来很像你在C中声明指针的方式。在 Java 8 下编译时,它会给出语法错误。

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


答案 1

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

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

char是我们的类型,所以剩下的唯一可能性是它是一个标识符。标识符”部分指出*cp

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

方法的 JavaDoc 指出:

当且仅当字符是字母 (§20.5.15) 或美元符号字符“$”() 或下划线(“低线”)字符“_”() 时,才被视为 Java 字母。\u0024\u005F

所以,很好,但从来没有有效。foo_foo$foo*foo


如果你想要一个更新的Java风格指南,谷歌的风格指南可以说是最常被引用的。


答案 2

这似乎是一个通用的编码样式文档,用于类似C语言,并添加了一些特定于Java的内容。例如,另请参阅下一页:

不要在容易与相等运算符混淆的地方使用赋值运算符。例:

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

告诉程序员避免语法错误是没有意义的,所以我们能从中得出的唯一结论是,该文档不是100%特定于Java的。

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

请注意,Sun甚至在Oracle进入公司之前很久就放弃了编码风格文档。他们克制自己去指定语言是什么,而不是如何使用它。


推荐