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
之间转换的方法,我将完全限定这两个方法,以便让读者更清楚地了解发生了什么。