23

我已经尝试在网上和我自己的知识体系中找到这个问题的答案,但我似乎无法找到一个明确、明确的答案。

假设我只使用了另一个包中的一个类,它只需要导入一次,比如myPack.anotherPackage.ClassName.

使用import 语句有什么区别(如果有的话) :

import myPack.anotherPackage.ClassName;

与使用完全限定名称相比:

myPack.anotherpackage.ClassName classInst = new myPack.anotherpackage.ClassName();

?

显然,这个问题只适用于ClassName只使用一次的情况。

4

7 回答 7

24

导入语句使您的代码更具可读性,因为您不会将代码与完整的包混在一起。

如果有冲突ClassNames,那么只有在这种情况下才建议使用完全限定名称

于 2012-08-10T18:31:36.477 回答
11

没有,在我看来。查看字节码 - 不会有任何区别。

 javap -c <your class>
于 2012-08-10T18:30:43.310 回答
6

1.它更多的是关于readability价值而不是重要性functional

2. import声明提供了一个cleaner code比使用完整的包名和 classorinterface名。

3.但是在导入模棱两可的包时一定要小心。

  `java.awt.List` and `java.util.List`

然后你需要完全导入一个和一个完整的包名,如下所示

import java.util.List;

and 

java.awt.List l = new java.awt.List();
于 2012-08-10T18:47:06.257 回答
3

代码编译后没有区别。在这两种情况下,字节码都将具有完全限定名,即编译器会自动将类名替换为限定名。它只是为了让程序员的生活更轻松,我们不必编写完全限定的名称来引用一个类。

于 2014-06-04T05:27:13.150 回答
1

没有真正的区别,尤其是对于您在此处引用的特定简单案例。请参阅Java:使用导入或显式包/类名?

于 2012-08-10T18:41:55.607 回答
1

导入和包用于命名和访问保护(默认),原因很简单,可以有许多具有相同名称的类。

为了区分它们,我们需要在包下将它们分开并在需要时导入它们。

导入类或直接输入完全限定名称没有区别,但有一些细微差别。1. 最重要的是,如果您导入包中的所有类(即 import xyz.*;),类仍然可能存在命名问题,例如,如果有多个通用导入,您可能在运行时使用了错误的类。

  1. 如果在运行时动态加载类,例如在运行时注册 JDBC 驱动程序,您需要提供完整的类名作为参数,以便可以动态加载。

通常使用以下最佳实践: 1. 切勿使用 import abc.*;导入格式并始终导入单个类(eclipse 或某些 IDE 可以自动更正导入到 * 并需要禁用此功能) 2. 当您已经导入了一个同名的类并想使用另一个类时,您必须使用完全限定的类名同一程序下同名的类。3.希望它有帮助:)

于 2018-01-24T00:28:13.253 回答
0

据我所知没有区别。唯一的区别是代码的冗长。通常,越冗长越难阅读。也许看字节码?

于 2012-08-10T18:31:23.833 回答