[英]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节 )或具有简单的名称,但是如果要广泛分发代码, 则应使用限定名称选择唯一的包名称 。 如果两个开发组碰巧选择了相同的程序包名称,而这些程序包后来在单个程序中使用,则可以避免发生冲突。
从包的可观察性 :
包
java
,java.lang
和java.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.