繁体   English   中英

导入不带Java名称的软件包

[英]Import package with no name 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始终是可观察的。

注意, 未列出未命名的软件包

进口报关单

未命名包中的类型( 第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.*;

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

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

是。 如果您在Eclipse,Netbeans或其他IDE中设置了项目,则可以尝试将类添加到项目中而不添加包。 通常会说类似“不建议将类添加到默认包中”之类的内容,但是无论如何都可以使您将该类添加到默认包中。 或者,您可以尝试在不带包的.java上运行javac ,并假设所有导入,语法等均正确,这才可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM