旧版Java语法

时间:2018-10-08 07:32:45

标签: java legacy

在阅读Java Code Conventions document from 1997时,我在P16上有关变量命名约定的示例中看到了这一点:

dependencies { implementation 'com.android.support:support-annotations:24.2.0' }

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

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

3 个答案:

答案 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中用作运算符。