java - JLS:包关键字之前的修饰符

标签 java eclipse package modifier jls

我刚刚发现在类中的包声明之前可以写几个修饰符。似乎所有可见性修饰符以及字段修饰符都是允许的,并且所有这些修饰符都可以多次使用。声明可能如下所示:

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:
Annotationsopt 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/

相关文章:

java - HTTPURLConnection 不遵循从 HTTP 到 HTTPS 的重定向

java - 如何使用Nebula NatTable的PreserveSelectionModel?

java - 在 Eclipse 中创建新的 Maven 项目时显示的错误

linux - Linux 上的 Eclipse 配置位置

python - 导入错误:无法从 [package_name] 导入名称 'db'

java - 无法加载来自其他 Maven 模块的应用程序上下文

java - 如何使用 MongoTemplate 将 Mongo Shell 脚本转换为 Java?

java - 如何使用java停止正在运行的批处理文件

Java:如何从包中编译可运行的 jar?

python - VSCode 1.39.x 和 Python 3.7.x : "ImportError: attempted relative import with no known parent package" - when started without debugging (CTRL+F5))