类和包的导入Java中有什么区别? [重复](Any difference between cl

2019-07-22 05:41发布

这个问题已经在这里有一个答案:

  • 为什么使用通配符与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;

除了代码的长度,是否有使用每一种方法以任何方式的任何特定优势? 内存分配? 性能?

Answer 1:

没有性能和内存分配的优势,无论是 - 他们都将编译到相同的字节码。

import语句告诉编译器在哪里可以找到源代码是指类。

然而,有一个优势,只能通过进口类。 如果在两个包具有完全相同的名称的类,有将是一个冲突,以被称为哪一类。

一个这样的例子是java.awt.List类和java.util.List类。

比方说,我们要使用一个java.awt.Paneljava.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.


Answer 2:

您选择的进口只用解析类的名字时,使编译时间差。

因此,唯一的优点/缺点适用于可读性。

只需要导入您所需要的最低限度似乎更好,因为有人可以看看你实际使用的是什么。 这就是说,在IDE可能处理这个问题,这是一个有争议的问题。



Answer 3:

有一个在所有的内存分配或应用程序的性能没有差异; import语句没有在运行时产生任何影响你的程序的。 他们只是指令,告诉在哪里(其中包)编译器来查找类。

但是,最好避免通配符语法和始终使用特定的进口。 这样做会避免关于兼容性与程序库的未来版本中的问题。

假设你正在使用你的程序的一些库的1.0版本,你做import somelibrary.*; 。 假设你的程序有一个类命名为X 。 现在,该库的1.1版本出来,你想使用它。 假设偶然有一个名为新类X在库的1.1版本。

如果您使用通配符语法,你突然也进口X从图书馆。 然后,编译器会给你一个错误,因为已经有一个类X在你的程序,编译器无法将区分XX从库。

如果只导入实际需要从库中的类,那么你没有得到这个问题,因为你不会自动导入X从库的1.1版本。



Answer 4:

使用“*”导入的优点是,它是更少的代码,和不太打字。 这是更重要的,如果你做你的编码与“哑巴”的文本编辑器,而不是一个IDE不是可以用省略号来隐藏进口,可以半自动增加进口。

采用进口的缺点“*”是:

  • 你导入的类名称冲突偶尔; 当一些类名用于例如在不同的包中的类和导入他们两个。
  • 你看不到一个类显式依赖通过查看进口。 但是,这是不那么重要,如果你的IDE可以告诉你的依赖一些其他的方式。


Answer 5:

执行一个明确的进口更安全在编译的时候,因为没有一个阶级冲突的可能性。 例如

import java.sql.*;
import java.util.*;

导致如果你想使用一个Date类的问题(从包装,即?)。

但除此之外,没有任何性能或内存方面。 这是一个纯粹的编译时间问题。



Answer 6:

任何像样的IDE将投入导入语句为您和其它更多之外。 获得更好的IDE如果这是你的问题。

的IntelliJ做它; 所以做的Eclipse。 我不使用NetBeans自己,但我敢打赌它。



文章来源: Any difference between class imports and package imports in Java? [duplicate]
标签: java import