请参阅样本:
private package com.xm.aws;
import static com.xml.aws.PcgTest.test;
public class PackageTest {
public static void main(String[] args) {
test(args);
}
}
private
告诉我有关包裹的内容是什么?
答案 0 :(得分:24)
我们不要将此与 package-private 或其他可添加到类,方法和字段的访问修饰符混淆。
Java language specification明确指出:
6.6.1。确定可访问性
- 始终可以访问包裹。
考虑到这一点,我想到的唯一答案是,(某些)编译器不会将此视为编译时错误,而是完全没有意义。无法限制方式的类或包的可访问性(并且每个包都可以访问)。
java language spec的另一部分:
7.4.1。命名包
编译单元中的包声明指定名称(第6.2节) 编译单元所属的包。
PackageDeclaration:
注释 opt 包PackageName;
因此关键字可以在注释之前。但访问修饰符不是包声明的一部分。即使我们expand on "Annotations",我们也不会在这里找到访问修饰符。
另一个引用,根据JLS 18. Syntax,package
之前允许的唯一内容是Annotation
。
CompilationUnit:
[[Annotations]包QualifiedIdentifier;]
{ImportDeclaration} {TypeDeclaration}
答案 1 :(得分:6)
您提供的代码示例在java中无效。 private
访问修饰符可以应用于成员和方法,包括内部类。您的代码在Eclipse中编译,但被Oracle自己的编译器拒绝。
事实上,Eclipse为这个java代码生成的字节代码完全相同有或没有private
关键字。这表明这可能是一个Eclipse错误,它在编译期间忽略了单词package
之前的文本。
您可能阅读或听到的是“package-private”这一短语,这意味着包外的任何内容都无法访问该类或成员。您可以通过不在类本身上使用任何访问修饰符来完成此操作。 Not 使用包上的private
关键字。
答案 2 :(得分:2)
虽然package不是使用private keyword实现的最高级别的Java封装,但它仍然是第二个最佳选择,必须封装整个功能而不仅仅是一个类。
简而言之,访问修饰符不是包声明的一部分
请参阅此link
答案 3 :(得分:2)
如果在包名称之前添加private,则这将是编译器错误
答案 4 :(得分:1)
在我看来它只是在日食中发生。当我通过命令提示符通过javac命令编译代码时,我得到这个编译时错误:
错误:预期的类,接口或枚举
看看这里的帖子,看起来像eclipse使用自己的jdk:
答案 5 :(得分:-1)
编写“私有包”和“包”是一样的。它们识别相同的访问级别(dafault)。
private修饰符指定只能在自己的包中访问该成员(与protected一样)。