Java需要进口澄清

时间:2012-12-18 01:54:37

标签: java import

由于我还不熟悉Java,因此我需要澄清如何正确完成导入。

首先:

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

我假设*表示" awt" "摇摆"目录。 但我以前见过人们这样做过:

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 个答案:

答案 0 :(得分: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包的直接子女。

答案 1 :(得分:2)

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

在实践中,我看到导入已经过优化 - 只需导入您需要的内容。大多数IDE,例如Eclipse,Netbeans和IntelliJ都可以选择为您做到这一点。

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:2)

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

但是,在使用第一种方法时,您需要了解可能的类冲突,如此stackoverflow线程中所述:Eclipse/Java - is it harmful to import java.(namespace).*?

由于我更喜欢​​第二种方法,因为我可以明确告诉我打算使用哪个类,并以这种方式使代码更易于阅读