我读过有关使用完全限定导入的内容。但我很好奇不明确使用进口的负面影响。例如,如果我使用以下代码
package blabla;
import foo.*;
import hee.*;
import lee.*;
...
...
public class ImportKing {
...
}
从我的理解,当这个类 - 在项目的任何地方使用ImportKing时,类加载器将加载它导入的任何类,因此将消耗额外的系统内存用于不必要的导入。
测试代码:
//import java.*;
public class ImportKing {
public static void main(String[] args) {
while(true) {
System.out.println("running");
}
}
}
测试结果:
USER PID%CPU%MEM VSZ RSS TTY STAT START TIME COMMAND
shanwu 3316 39.8 0.6 3182012 52196 pts / 0 Sl + 09:25 0:03 java ImportKing with extra imports
shanwu 3440 43.7 0.6 3182012 52752 pts / 0 Sl + 09:27 0:03 java ImportKing无需额外进口
我没有看到额外进口对计划效果的任何负面影响。是否由java编译器处理额外的导入,所以我们没有像浪费系统内存那样的问题?
答案 0 :(得分:2)
import
语句在运行时完全没有任何作用。
import
语句只是使您可以在源代码中使用简单的类型名称(及其成员)而不是完全限定名称。
答案 1 :(得分:2)
问:类加载器将加载它导入的任何类,
答:不,当需要类时(例如,调用构造函数),将调用类加载器。这与源代码中的“导入”无关。
问:因此会为不必要的导入消耗额外的系统内存。
<答>答:不:课程不会被不必要地加载;内存不“浪费”。建议:
以下是Java类加载基础知识的两个很好的链接:
http://www.onjava.com/pub/a/onjava/2005/01/26/classloading.html
http://www2.sys-con.com/itsg/virtualcd/java/archives/0808/chaudhri/
以下是Java规范对“import”的评价:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5
导入声明通过简单的方式使类型或成员可用 仅在实际包含的编译单元内的名称 进口申报。引入的类型或成员的范围 通过import声明特别不包含PackageName 包裹声明,当前的其他进口声明 编译单元或同一包中的其他编译单元。
“import”是一个编译时构造,用于简化识别“名称”(可能是许多不同中的一个)“类定义”。 不会影响运行时行为;它与“类加载”完全分开。