Java:import语句与完全限定名?

Java:import语句与完全限定名?,java,import,Java,Import,我试图在网上和自己的知识中找到答案,但似乎找不到一个明确的答案 假设我只使用另一个包中的一个类,只需要导入一次,比如说myPack.anotherPackage.ClassName 使用导入语句之间有什么区别(如果有): import myPack.anotherPackage.ClassName; myPack.anotherpackage.ClassName classInst = new myPack.anotherpackage.ClassName(); 与使用完全限定名相比: im

我试图在网上和自己的知识中找到答案,但似乎找不到一个明确的答案

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

使用导入语句之间有什么区别(如果有):

import myPack.anotherPackage.ClassName;
myPack.anotherpackage.ClassName classInst = new myPack.anotherpackage.ClassName();
与使用完全限定名相比

import myPack.anotherPackage.ClassName;
myPack.anotherpackage.ClassName classInst = new myPack.anotherpackage.ClassName();
?


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

在我看来,没有。看看字节码——不会有什么区别

 javap -c <your class>
javap-c

据我所知没有区别。唯一的区别是代码的冗长。一般来说,越冗长越难阅读。也许可以查看字节码?

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


如果存在
类名冲突
,则仅在这种情况下,建议使用完全限定名

没有实际区别,特别是对于此处引用的特定简单案例。参见

1.它更多地是关于
可读性
而非
功能重要性

2.
import
语句提供了比使用完整包名和
接口
名称更干净的
代码

3.但是导入模棱两可的包时必须小心。

  `java.awt.List` and `java.util.List`
然后您需要导入一个完整的和一个完整的包名,如下所示

import java.util.List;

and 

java.awt.List l = new java.awt.List();

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

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

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

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

  • 在运行时动态加载类的情况下,例如在运行时注册JDBC驱动程序,您需要提供完整的限定类名作为参数,以便动态加载 一般使用以下最佳实践: 1.切勿使用进口abc。*;导入和始终导入单个类的格式(eclipse或某些IDE可以将导入自动更正为*并需要禁用此功能) 2.当您已经导入了一个同名的类,并且希望在同一程序下使用另一个同名的类时,必须使用完全限定类名。
    3.希望有帮助:)

    编译时如何?有什么区别吗?@NathanSabruka我所知道的书中没有像@AaronKurtzhals的复制品这样的,不完全是。您指出的问题询问了使用import语句的性能,而这个问题更多的是关于使用import与使用限定名称之间的区别。答案会有所不同。在我链接到的问题中,有哪些其他信息没有包含在aioobe接受的答案中?我认为您最多需要导入一个完整的信息。如果我觉得FQN使代码更具可读性,那么我已经使用了FQN。例如,如果我有一个在
    java.util.Date
    java.sql.Date
    之间转换的方法,我将完全限定这两个方法,以便让读者更清楚地了解发生了什么。