27

请看示例:

private package com.xm.aws;

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

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

private包裹告诉我什么?

4

6 回答 6

24

我们不要将此与可以添加到类、方法和字段的包私有或其他访问修饰符混淆。

Java 语言规范明确指出:

6.6.1. 确定可访问性

  • 包总是可以访问的。

看着那,我想到的唯一答案是,(某些)编译器不会将此视为编译时错误,而是完全没有意义。以这种方式限制对类或包的可访问性是不可能的(并且每个包始终是可访问的)。

java语言规范的另一部分:

7.4.1。命名包

编译单元中的包声明指定编译单元所属包的名称(第 6.2 节)。

包装声明:

注释选择包 PackageName ;

所以关键字前面可能有注释。但是访问修饰符不是包声明的一部分。即使我们扩展“注释”,我们也不会在这里找到访问修饰符。

根据JLS 18 的另一个参考。语法唯一允许放在前面package的是Annotation.

CompilationUnit:
[[Annotations] package QualifiedIdentifier ;]
{ImportDeclaration} {TypeDeclaration}

于 2013-06-19T08:35:39.290 回答
6

您提供的代码示例在 java 中无效。private访问修饰符可以应用于成员和方法,包括内部类。您的代码在 Eclipse 中编译,但被 Oracle 自己的编译器拒绝。

事实上,Eclipse 为这段 java 代码生成的字节码,不管有没有那个关键字,都是完全一样的。private这表明这可能是一个 Eclipse 错误,它package在编译期间忽略了单词之前的文本。

您可能已经阅读或听说过“package-private”这个短语,这意味着包之外的任何内容都无法访问该类或成员。您可以通过不对类本身使用任何访问修饰符来做到这一点。不是通过使用private包装上的关键字。

于 2013-06-19T08:39:37.223 回答
2

虽然 package 不是 Java 中使用private 关键字实现的最高程度的封装,但它仍然是第二好的选择,并且必须封装整个功能而不仅仅是一个类。

简而言之,访问修饰符不是包声明的一部分

参考这个链接

于 2013-06-19T08:28:35.830 回答
2

如果你在包名之前添加私有,这将是编译器错误

于 2013-06-19T08:34:05.307 回答
1

在我看来它只发生在日食中。当我通过命令提示符通过 javac 命令编译代码时,出现此编译时错误:

错误:需要类、接口或枚举

看这里的帖子,貌似eclipse使用了自己的jdk:

如果我有eclipse,是否需要安装java sdk

于 2013-06-19T08:51:20.580 回答
-1

写“私人包”和“包”是一样的。它们标识相同的访问级别(默认级别)。

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

于 2013-06-19T08:33:19.893 回答