Wil*_*iam 5 java size import class
好的,如果我有一个项目使用:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Color;
import java.awt.Polygon;
Run Code Online (Sandbox Code Playgroud)
它会使Class文件更小:
import java.awt.*
Run Code Online (Sandbox Code Playgroud)
我反对它,因为我输入了许多我不需要的东西.我正在考虑因为它使文件中的字符少得多.
coo*_*ird 12
不,没有任何区别.
根据Java虚拟机规范,第二版,第5章:加载,链接和初始化,说明如下:
Java虚拟机动态加载(§2.17.2),链接(§2.17.3)和初始化(§2.17.4)类和接口.加载是查找具有特定名称的类或接口类型的二进制表示并从该二进制表示创建类或接口的过程.链接是获取类或接口并将其组合到Java虚拟机的运行时状态以便可以执行的过程.
在编译时,没有类的链接,因此,使用通配符进行import输入没有区别.其他类不会一起包含在生成的class文件中.
实际上,如果你查看class文件的字节码(通过javap或这样的反汇编程序),你将找不到任何import语句,因此源中包含更多或更少数量的import语句不会影响class文件的大小.
这是一个简单的实验:尝试编写程序,import使用通配符编译s,使用显式导入编译另一个.生成的class文件大小应相同.
import在特定类上使用显式语句可能性较差(如果不使用像Eclipse这样的IDE会为你编写它,那就麻烦了),但是允许你在两个包中处理类名的重叠.
例如,包和包List中都有一个类.通过导入两个包,名为的类将发生冲突:java.utiljava.awtList
import java.util.*;
import java.awt.*;
// ... snip ... //
List l; // which "List" are we talking about?
Run Code Online (Sandbox Code Playgroud)
通过仅导入您需要的特定类,可以在某种程度上避免这些冲突:
import java.util.Hashmap;
import java.awt.List;
// .. snip ... //
List l; // Now we know for sure it's java.awt.List
Run Code Online (Sandbox Code Playgroud)
当然,如果你不得不同时使用它们java.util.List,java.awt.List那么你就不幸了; 你需要明确地使用他们的完全限定的类名.