首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪个会使类文件变得更大?导入java.awt.*,还是一串或一条导入语句?

哪个会使类文件变得更大?导入java.awt.*,还是一串或一条导入语句?
EN

Stack Overflow用户
提问于 2009-02-25 09:14:15
回答 10查看 2.9K关注 0票数 5

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

代码语言:javascript
复制
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文件变得更小:

代码语言:javascript
复制
import java.awt.*

我反对它,因为我导入了很多我不需要的东西。我正在考虑它,因为它使文件有更少的字符。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-02-25 09:17:58

没什么区别。这些只是一个编译时构造。

票数 17
EN

Stack Overflow用户

发布于 2009-02-25 09:25:35

不,根本没有区别。

根据The Java Virtual Machine Specifications, Second Edition的说法,Chapter 5: Loading, Linking and Initializing说了以下内容:

Java虚拟机动态加载(§2.17.2)、链接(§2.17.3)和初始化(§2.17.4)类和接口。加载是查找具有特定名称的类或接口类型的二进制表示并从该二进制表示创建类或接口的过程。链接是获取类或接口并将其组合到Java虚拟机的运行时状态以便可以执行的过程。

在编译时,不存在类的链接,因此,使用通配符进行importing没有区别。其他类不会一起包含在生成的class文件中。

实际上,如果您查看class文件的字节码(通过javap或类似的反汇编程序),您将找不到任何import语句,因此在源代码中包含或多或少数量的import语句不会影响class文件的大小。

下面是一个简单的实验:尝试编写一个程序,并使用通配符使用import进行编译,另一个使用显式导入进行编译。生成的class文件的大小应该相同。

在特定类上使用显式的import语句可读性可能较差(如果不使用像Eclipse这样的集成开发环境,它将为您编写它,则会很麻烦),但它将允许您处理两个包中的类名重叠问题。

例如,在java.utiljava.awt包中都有一个List类。通过导入这两个包,将存在名为List的类的冲突

代码语言:javascript
复制
import java.util.*;
import java.awt.*;

// ... snip ... //

List l;    // which "List" are we talking about?

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

代码语言:javascript
复制
import java.util.Hashmap;
import java.awt.List;

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

当然,如果您必须同时使用java.util.Listjava.awt.List,那么您就不走运了;您需要显式地使用它们的全限定类名。

票数 13
EN

Stack Overflow用户

发布于 2009-02-25 09:20:52

Java import语句不会向类文件添加任何大小。它允许编译器推断在编译时引用的名称。

唯一的区别就是这条线

代码语言:javascript
复制
import java.util.*;

makes是你可以这样写的:

代码语言:javascript
复制
Set<String> set;

而不是:

代码语言:javascript
复制
java.util.Set<String> set;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/585268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档