导入没有名称Java的包

来自http://cs-fundamentals.com/tech-interview/java/which-java-package-is-imported-by-default.php

在每个Java程序中都可以有一个未命名的包,它只是一个没有名称的包。 如果在编写类定义时省略了package语句,则类名将放入默认包中,该包没有名称。 Java编译器自动导入此包。

真的吗?

编辑

我对Java编译器的关注自动导入了这个包。

不,编译器不会导入未命名的包。

请注意Java语言规范中的以下内容。

从编译单位 :

没有包声明的编译单元是未命名包的一部分( 第7.4.2节 )。

来自包裹 :

对于小程序和临时开发,包可以是未命名的( 第7.4.2节 )或具有简单的名称,但如果要广泛分发代码, 则应使用限定名称选择唯一的包名称 。 这可以防止在两个开发组碰巧选择相同的包名称并且稍后将在单个程序中使用这些包时可能发生的冲突。

从包的可观察性 :

javajava.langjava.io始终是可观察的。

请注意, 未列出未命名的包

来自import声明 :

未命名包中的类型( 第7.4.2节 )没有规范名称,因此在每种导入声明中对规范名称的要求意味着(a) 无法导入未命名包中的类型 ,以及(b) static成员无法导入未命名包中的类型 因此, §7.5.1 , §7.5.2 , §7.5.3和§7.5.4都要求在未命名的包中导入类型(或其static成员)的任何尝试都有编译时错误。

不,声明

Java编译器自动导入此包。

在几个方面是不正确的。

首先,无法导入包。 §7.5(JLS)说:

导入声明允许通过由单个标识符组成的简单名称(第6.2节)引用命名类型或静态成员。

这仅指命名类型和静态成员。 不是包! 虽然…有一个方便的方法从import my.pkg.*;包中的每个命名类型import my.pkg.*;

其次,编译器不会自动从未命名的包中导入任何内容。 实际上, 无法从任何命名包中引用未命名包的任何程序元素 。

我想这个声明意味着您可以访问同一个包中的所有元素(您正在为其编写代码),而无需任何import语句。 但是对于所有包都是如此。

是。 如果在Eclipse,Netbeans或其他IDE中设置了项目,则可以尝试在不添加包的情况下将类添加到项目中。 它通常会说“不建议将类添加到默认包”,但允许您将该类添加到默认包中。 或者,您可以尝试在没有包的情况下在.java上运行javac ,这可以假设所有导入,语法等都正确。