我刚刚发现在类中的包声明之前可以编写几个修饰符。似乎允许所有可见性修改器以及场修改器以及所有这些修改器多次。声明可能如下所示:
public public final static private private static protected
volatile synchronized strictfp strictfp static final package de.lfnn.test;
这可能意味着什么?
对于我来说,第一眼看来它似乎是语法上的胡言乱语。 JLS中的一些漏洞可以编译但不会以任何方式影响编译器。(是的,我搜索过JLS和网络; - ))
更新:正如@assylias所指出的,JLS不允许这种结构。我试图用javac编译它,它失败了。然而,eclipse编译器允许它。
答案 0 :(得分:2)
我不确定您在哪里阅读,但您提出的语法无效。 package declaration必须遵循以下语法:
PackageDeclaration:
Annotations
opt
package PackageName ;
因此,您可以在package
关键字之前添加注释,但就是这样。例如,public package a.b.c;
不是有效语句,并使用javac生成以下编译错误(在jdk 8中):
Test1.java:5: error: class, interface, or enum expected
public package a.b.c;
1 error
注意:似乎public package a.b.c;
编译了一些编译器。这看起来像一个bug,因为它与语言规范不符。