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

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

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

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

 import myPack.anotherPackage.ClassName; 

与使用完全限定名称

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

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

导入语句使您的代码更具可读性 ,因为您不会使用完整的包使代码混乱。

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

没有,在我看来。 看看字节码 – 没有区别。

  javap -c  

它更多地关注readability价值而非 functional重要性。

2. import语句提供了比使用完整包名称以及 classinterface名称cleaner code

但是在导入含糊不清的包时必须小心

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

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

 import java.util.List; and java.awt.List l = new java.awt.List(); 

从我的知识没有区别。 唯一的区别是代码的冗长程度。 一般来说,阅读越难越冗长。 也许看一下字节码?

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

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

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

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

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

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

一般按照最佳实践使用:1。永远不要使用import abc。*; 导入格式并始终导入单个类(eclipse或某些IDE可以自动更正导入到*并需要禁用它)2。当您已经导入了同名的类并想要使用另一个类时,必须使用完全限定的类名同一程序下具有相同名称的类。 希望它有帮助:)