2014-10-09 33 views
0

http://source.android.com/source/code-style.html在java中额外的进口类的影响

我读了关于使用完全合格的进口。但我很好奇不明确使用导入的负面影响。举例来说,如果我使用下面的代码

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 S1中+ 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

http://stackoverflow.com/questions/147454/why-is-using-a-wild-card-with-a-java-import-statement-bad – Voicu 2014-10-09 01:41:39

+0

@Voicu谢谢,那个答案也解释了我的部分题。 – shanwu 2014-10-09 04:21:48

回答

2

问:类加载器将其加载进口的任何类,

A:无,类加载器将需要一个类时调用(例如,调用构造)。这与源代码中的“imports”无关。问:因此会消耗额外的系统内存以用于不必要的进口。 A:否:类不是不必要地加载类;内存是而不是“浪费”。

建议:

这里是Java类加载的基本知识两个很好的链接:

这里是Java规范不得不说关于“进口” “:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5

进口报关单只在实际包含 进口报关编译单元使得类型或可用成员通过其简单的 名字。类型(一个或多个)或构件(一个或多个)的范围由一个进口声明引入 具体不包括包声明的PACKAGENAME ,在当前 编译单元的其他进口申报,或在同一个包中的其它编译单元。

“导入”是一个编译时构造,以简化用“(可能是许多不同的)”类定义之一“标识”名称“。它确实不是影响运行时行为;从“课程加载”完全分开

2

import语句在运行时没有任何作用。

import声明使您可以在源代码中使用简单的类型名称(及其成员),而不是完全限定的名称。

+0

你能否给我更多的额外进口处理的细节? – shanwu 2014-10-09 01:41:42

+0

@shanwu你想知道什么? – 2014-10-09 01:42:22

+0

java如何处理额外的导入? – shanwu 2014-10-09 01:43:11