Java中的类导入和包导入之间有什么区别?

Cha*_*ara 15 java import

在Java中,我们可以导入单个类以及整个类(包).

举个例子

import java.util.*
Run Code Online (Sandbox Code Playgroud)

包括

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;
Run Code Online (Sandbox Code Playgroud)

除了代码的长度,以任何方式使用每种方法有什么特别的优势吗?内存分配?性能?

coo*_*ird 26

两者都没有性能或内存分配优势 - 它们都将编译为相同的字节码.

import语句是告诉编译器在哪里找到源代码所引用的类.

但是,仅按类导入是有利的.如果在两个包中存在具有完全相同名称的类,则将引发关于引用哪个类的冲突.

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

假设我们想要使用a java.awt.Panel和a java.util.List.如果源导入包,如下所示:

import java.awt.*;
import java.util.*;
Run Code Online (Sandbox Code Playgroud)

然后,提到这个List课将是一个暧昧的:

List list; // Which "List" is this from? java.util? java.awt?
Run Code Online (Sandbox Code Playgroud)

但是,如果显式导入,则结果为:

import java.awt.Panel;
import java.util.List;

List list; // No ambiguity here -- it refers to java.util.List.
Run Code Online (Sandbox Code Playgroud)


WW.*_*WW. 6

您选择使用的导入仅在解析类名时产生编译时差异.

所以唯一的优点/缺点适用于可读性.

只导入你需要的最小值似乎更好,因为有人可以看看你实际使用的是什么.也就是说,IDE可能会处理这个问题,这是一个有争议的问题.