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
语句提供了比使用完整包名称以及 class
或interface
名称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。*;)这些类仍然可能有命名问题,例如,如果有多个常规导入,则可能在运行时使用了错误的类。
- 如果在运行时动态加载类,例如在运行时注册JDBC驱动程序,则需要提供完全限定的类名作为参数,以便可以动态加载它。
一般按照最佳实践使用:1。永远不要使用import abc。*; 导入格式并始终导入单个类(eclipse或某些IDE可以自动更正导入到*并需要禁用它)2。当您已经导入了同名的类并想要使用另一个类时,必须使用完全限定的类名同一程序下具有相同名称的类。 希望它有帮助:)