4

由于我还是 Java 新手,因此我需要澄清如何正确完成导入。

第一的:

import java.awt.*;
import java.swing.*;

我假设 * 表示“awt”和“swing”目录下的任何内容。但我以前见过有人这样做:

import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;

我是不是误会了什么?还是我只是在寻找冗余?

4

4 回答 4

4
import javax.awt.*

将包含包中的所有类,javax.awt但不包含任何其他嵌套在其中的包,javax.awt例如javax.awt.event. 您需要将其用作单独的导入。所有不同名称的包都需要单独包含。

使用import javax.swing.*您将不需要以下导入:

import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

因为它们是swing包的直接子级。

于 2012-12-18T01:59:56.237 回答
2

在导入语句中,* 表示您想要该包中的所有内容。一般来说,这不是一个好主意——你不需要所包含的包中的所有东西。

在实践中,我已经看到优化的导入 - 只需导入您需要的内容。大多数 IDE,例如 Eclipse、Netbeans 和 IntelliJ 都可以选择为您执行此操作。

于 2012-12-18T02:04:04.603 回答
2

使用显式导入并避免使用通配符通常是个好主意,这样您就可以始终准确地知道要导入的内容。但是,JVM 只会在您使用通配符时导入所需的类(而不是从子包中导入),因此不会降低效率(除了编译开销可以忽略不计)。

这样做不一定是多余的,但在我看来有点尴尬:

import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.*;

可能在另一个包中声明了另一个 UnsupportedLookAndFeelException,因此您要确保包含 javax.swing 包中的那个,因此在这种情况下它是显式的。如上所述,您最好的选择是允许 IDE 帮助您明确选择所需的导入。

于 2012-12-18T02:06:51.067 回答
2

当您在导入(通配符导入)末尾添加 * 时,您正在导入某个包中包含的所有类,即com.test.*. 另一方面,当您添加例如一个类时,您将专门导入该特定类,即com.test.TestClass

但是,在使用第一种方法时,您需要注意可能的类冲突,如此 stackoverflow 线程中所述:Eclipse/Java - 导入 java.(namespace).* 是否有害?

Due to that I prefer the second approach since I can explicitly tell which class I intend to use, and in that way it makes the code easier to read

于 2012-12-18T02:06:58.057 回答