当前位置:  开发笔记 > 编程语言 > 正文

哪个会使Class文件更大?import java.awt.*,还是一堆或单个import语句?

如何解决《哪个会使Class文件更大?importjava.awt.*,还是一堆或单个import语句?》经验,为你挑选了2个好方法。

好的,如果我有一个项目使用:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Color;
import java.awt.Polygon;

它会使Class文件更小:

import java.awt.*

我反对它,因为我输入了许多我不需要的东西.我正在考虑因为它使文件中的字符少得多.



1> Kent Boogaar..:

没有不同.这些只是一个编译时构造.



2> coobird..:

不,没有任何区别.

根据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?

通过仅导入您需要的特定类,可以在某种程度上避免这些冲突:

import java.util.Hashmap;
import java.awt.List;

// .. snip ... //
List l;    // Now we know for sure it's java.awt.List

当然,如果你不得不同时使用它们java.util.List,java.awt.List那么你就不幸了; 你需要明确地使用他们的完全限定的类名.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有