Java包中import语句作用域及相关使用问题咨询
问题(i):是否必须在每个类单独导入,无法依赖同包其他类的导入声明
是的,这是Java语言规范明确规定的:
import声明的作用域仅限当前编写的.java源文件,仅对当前文件内的类生效,不会和同包下的其他类共享导入配置- 如果不想单独导入,你可以在用到对应类的位置直接写全限定类名,比如
java.util.ArrayList,但这种写法代码可读性差,一般只用来解决类名冲突问题
问题(ii):Maven是否有机制避免导入语句重复的问题
没有,Maven的核心能力是项目依赖管理、生命周期构建,不负责处理源码层面的import语句:
- 避免手写重复导入的能力由IDE提供,比如你用的IntelliJ自带自动导包、自动优化冗余导入的功能,开启后不需要手动写任何
import语句,IDE会自动补全需要的导入、删除没用的导入 - 源码里多个类导入同一个包属于正常的编码场景,本身不存在需要解决的“问题”,自然也不需要Maven做特殊处理
问题(iii):重复导入是否会造成明显的内存效率问题
完全不会,import是仅作用于编译阶段的语法糖:
- 编译器编译源码时,会把所有导入的类引用统一替换成全限定类名,
import语句本身不会被编译进最终的.class字节码文件 - 哪怕你在同一个源文件里重复导入同一个类100次,编译出来的字节码和只导入1次的完全一致,不会对运行时内存、执行效率产生任何影响
内容的提问来源于stack exchange,提问作者Rasputin
相关产品推荐
相关产品推荐

