请看示例:
private package com.xm.aws;
import static com.xml.aws.PcgTest.test;
public class PackageTest {
public static void main(String[] args) {
test(args);
}
}
private
包裹告诉我什么?
我们不要将此与可以添加到类、方法和字段的包私有或其他访问修饰符混淆。
Java 语言规范明确指出:
6.6.1. 确定可访问性
- 包总是可以访问的。
看着那,我想到的唯一答案是,(某些)编译器不会将此视为编译时错误,而是完全没有意义。以这种方式限制对类或包的可访问性是不可能的(并且每个包始终是可访问的)。
java语言规范的另一部分:
7.4.1。命名包
编译单元中的包声明指定编译单元所属包的名称(第 6.2 节)。
包装声明:
注释选择包 PackageName ;
所以关键字前面可能有注释。但是访问修饰符不是包声明的一部分。即使我们扩展“注释”,我们也不会在这里找到访问修饰符。
根据JLS 18 的另一个参考。语法唯一允许放在前面package
的是Annotation
.
CompilationUnit:
[[Annotations] package QualifiedIdentifier ;]
{ImportDeclaration} {TypeDeclaration}
您提供的代码示例在 java 中无效。private
访问修饰符可以应用于成员和方法,包括内部类。您的代码在 Eclipse 中编译,但被 Oracle 自己的编译器拒绝。
事实上,Eclipse 为这段 java 代码生成的字节码,不管有没有那个关键字,都是完全一样的。private
这表明这可能是一个 Eclipse 错误,它package
在编译期间忽略了单词之前的文本。
您可能已经阅读或听说过“package-private”这个短语,这意味着包之外的任何内容都无法访问该类或成员。您可以通过不对类本身使用任何访问修饰符来做到这一点。不是通过使用private
包装上的关键字。
虽然 package 不是 Java 中使用private 关键字实现的最高程度的封装,但它仍然是第二好的选择,并且必须封装整个功能而不仅仅是一个类。
简而言之,访问修饰符不是包声明的一部分
参考这个链接
如果你在包名之前添加私有,这将是编译器错误
在我看来它只发生在日食中。当我通过命令提示符通过 javac 命令编译代码时,出现此编译时错误:
错误:需要类、接口或枚举
看这里的帖子,貌似eclipse使用了自己的jdk:
写“私人包”和“包”是一样的。它们标识相同的访问级别(默认级别)。
private 修饰符指定该成员只能在其自己的包中访问(与受保护的一样)。