“私人包裹”是什么意思?

时间:2013-06-19 08:22:06

标签: java package

请参阅样本:

private package com.xm.aws;

import static com.xml.aws.PcgTest.test;

public class PackageTest {
    public static void main(String[] args) {
        test(args);
    }
}

private告诉我有关包裹的内容是什么?

6 个答案:

答案 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. Syntaxpackage之前允许的唯一内容是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:

Do I need to install java sdk if I have eclipse

答案 5 :(得分:-1)

编写“私有包”和“包”是一样的。它们识别相同的访问级别(dafault)。

private修饰符指定只能在自己的包中访问该成员(与protected一样)。