这个问题已经在这里有一个答案:
- 为什么使用通配符与Java导入语句不好? 14个回答
在Java中,我们可以导入单一类以及整个组类(包)。
举个例子
import java.util.*
包括
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
import java.util.Iterator;
import java.util.Map;
除了代码的长度,是否有使用每一种方法以任何方式的任何特定优势? 内存分配? 性能?
没有性能和内存分配的优势,无论是 - 他们都将编译到相同的字节码。
在import
语句告诉编译器在哪里可以找到源代码是指类。
然而,有一个优势,只能通过进口类。 如果在两个包具有完全相同的名称的类,有将是一个冲突,以被称为哪一类。
一个这样的例子是java.awt.List
类和java.util.List
类。
比方说,我们要使用一个java.awt.Panel
和java.util.List
。 如果源进口包,如下所示:
import java.awt.*;
import java.util.*;
然后,参照List
类将是ambigious:
List list; // Which "List" is this from? java.util? java.awt?
但是,如果一个明确的进口,那么结果将是:
import java.awt.Panel;
import java.util.List;
List list; // No ambiguity here -- it refers to java.util.List.
您选择的进口只用解析类的名字时,使编译时间差。
因此,唯一的优点/缺点适用于可读性。
只需要导入您所需要的最低限度似乎更好,因为有人可以看看你实际使用的是什么。 这就是说,在IDE可能处理这个问题,这是一个有争议的问题。
有一个在所有的内存分配或应用程序的性能没有差异; import语句没有在运行时产生任何影响你的程序的。 他们只是指令,告诉在哪里(其中包)编译器来查找类。
但是,最好避免通配符语法和始终使用特定的进口。 这样做会避免关于兼容性与程序库的未来版本中的问题。
假设你正在使用你的程序的一些库的1.0版本,你做import somelibrary.*;
。 假设你的程序有一个类命名为X
。 现在,该库的1.1版本出来,你想使用它。 假设偶然有一个名为新类X
在库的1.1版本。
如果您使用通配符语法,你突然也进口X
从图书馆。 然后,编译器会给你一个错误,因为已经有一个类X
在你的程序,编译器无法将区分X
和X
从库。
如果只导入实际需要从库中的类,那么你没有得到这个问题,因为你不会自动导入X
从库的1.1版本。
使用“*”导入的优点是,它是更少的代码,和不太打字。 这是更重要的,如果你做你的编码与“哑巴”的文本编辑器,而不是一个IDE不是可以用省略号来隐藏进口,可以半自动增加进口。
采用进口的缺点“*”是:
- 你导入的类名称冲突偶尔; 当一些类名用于例如在不同的包中的类和导入他们两个。
- 你看不到一个类显式依赖通过查看进口。 但是,这是不那么重要,如果你的IDE可以告诉你的依赖一些其他的方式。
执行一个明确的进口更安全在编译的时候,因为没有一个阶级冲突的可能性。 例如
import java.sql.*;
import java.util.*;
导致如果你想使用一个Date类的问题(从包装,即?)。
但除此之外,没有任何性能或内存方面。 这是一个纯粹的编译时间问题。
任何像样的IDE将投入导入语句为您和其它更多之外。 获得更好的IDE如果这是你的问题。
的IntelliJ做它; 所以做的Eclipse。 我不使用NetBeans自己,但我敢打赌它。
文章来源: Any difference between class imports and package imports in Java? [duplicate]