导入包没有名称Java

时间:2015-11-11 07:27:45

标签: java import

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

  

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

这是真的吗?

修改

我对 Java编译器的关注会自动导入此包。

3 个答案:

答案 0 :(得分:5)

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

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

来自Compilation Units

  

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

来自Packages

  

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

来自Observability of a Package

  

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

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

来自Import Declarations

  

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

答案 1 :(得分:1)

没有。声明

  

Java编译器自动导入此包。

在几个方面都不正确。

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

  

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

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

其次,编译器不会自动从未命名的包中导入任何内容。实际上,it is not possible to refer to any program element of the unnamed package from any named package

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

答案 2 :(得分:0)

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