在阅读Java Code Conventions document from 1997时,我在P16上有关变量命名约定的示例中看到了这一点:
dependencies { implementation 'com.android.support:support-annotations:24.2.0' }
第二个声明很有趣-对我来说,它看起来很像您在C中声明指针的方式。在Java 8下编译时会产生语法错误。
只是出于好奇:这曾经是有效的语法吗?如果是这样,那是什么意思?
答案 0 :(得分:26)
我想这是一个复制粘贴错误。
在JLS 1中(真的很容易找到它们!),local variable declarations的这一节指出,这样的声明从本质上讲是一种类型,后跟一个标识符。请注意,没有对*
进行特殊引用,但是对[]
进行了特殊引用(对于数组)。
char
是我们的类型,因此剩下的唯一可能性是*cp
是标识符。 section on Identifiers状态
标识符是Java字母和Java的无限长度序列 数字,其中第一个必须是Java字母。
...
Java字母是一个字符,Character.isJavaLetter(§20.5.17)方法为其返回true
然后the JavaDoc for that method指出:
当且仅当字符是一个字母时,该字符才被视为Java字母 字母(§20.5.15)或美元符号字符'$'(
\u0024
)或 下划线(“ low line”)字符'_'(\u005F
)。
所以foo
,_foo
和$foo
很好,但是*foo
永远无效。
如果您想要更新的Java样式指南,Google's style guide可以说是最常引用的。
答案 1 :(得分:5)
这似乎是针对C语言的通用编码样式文档,其中包含一些特定于Java的附加内容。另请参见下一页:
请勿在容易将其与相等运算符混淆的地方使用赋值运算符。示例:
if (c++ = d++) { // AVOID! Java disallows. … }
告诉程序员无论如何都避免语法错误是没有意义的,因此我们可以得出的唯一结论是文档不是100%特定于Java的。
另一种可能性是,它被认为是整个Java系统(包括JRE和JDK的C ++部分)的一种编码样式。
请注意,甚至在Oracle出现之前,Sun就已经放弃了编码样式文档。他们约束自己来指定是什么语言,而不是如何使用它。
答案 2 :(得分:0)
语法无效!
这只是复制/粘贴错误。
变量中的标记(*)仅适用于C语言,因为它使用指针,而JAVA从未使用指针。
并且令牌(*)仅在JAVA中用作运算符。