我刚刚发现在类中的包声明之前可以写几个修饰符。似乎所有可见性修饰符以及字段修饰符都是允许的,并且所有这些修饰符都可以多次使用。声明可能如下所示:
public public final static private private static protected
volatile synchronized strictfp strictfp static final package de.lfnn.test;
这可能意味着什么?
对我来说,第一眼看上去它像是语法上的胡言乱语。 JLS 中的一些漏洞可以编译,但不会以任何方式影响编译器。
(是的,我已经搜索了 JLS 和网络;-))
更新:正如 @assylias 所指出的,JLS 不允许这种构造。我尝试用 javac 编译它,但失败了。尽管如此,Eclipse 编译器允许这样做。
最佳答案
我不确定您在哪里读到的,但您建议的语法无效。一个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;
使用某些编译器进行编译。这看起来像是一个错误,因为它与语言规范不匹配。
关于java - JLS:包关键字之前的修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383686/