2012-12-18 98 views
4

因为我还是Java新手,所以我需要澄清一下如何正确完成导入。需要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.*; 

我误会了什么吗?或者我只是发现冗余?

+5

使用Eclipse,您可以并应该利用自动包组织Ctrl-Shift-O或Command-Shift-O,具体取决于您的平台)。话虽如此,阅读[这里](http://stackoverflow.com/questions/8550214/what-is-the-impact-of-redundant-import-statements-in-java)直接关于您的问题的信息。 – Perception

+0

伟大的建议 - 感知。在完成击键后,我可以看到必要的输入。很好的特性 – coffeemonitor

回答

4
import javax.awt.* 

将包括所有的类在包javax.awt但它会嵌套的javax.awtjavax.awt.event内不inclue任何其他包。您需要将其用作单独的导入。所有不同名称的包都需要单独包含。

使用import javax.swing.*你不会需要以下进口:

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

,因为他们是swing包的直接孩子。

+0

这是你的答案的后半部分的错字...... javax.swing ....类是'awt'包的直接子类吗? – Dancrumb

+0

糟糕。是的,那是一个错字。纠正。 Ment swing。 –

+0

认为它可能是... +1与更正! – Dancrumb

2

在导入语句中,*表示您希望从该软件包获取所有内容。总的来说,这不是一个好主意 - 你不需要需要所有的东西都来自你所包含的软件包。

实际上,我看到进口优化 - 仅仅导入你需要的东西。大多数IDE,比如Eclipse,Netbeans和IntelliJ都可以选择为您做这些。

2

使用显式导入并避免使用通配符通常是个好主意,这样您就可以始终确切地知道要导入的内容。但是,当您使用通配符(但不是来自子包)时,JVM将只导入所需的类,因此效率不会有任何损失(除了可忽略的编译开销外)。

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

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

有可能是另一种UnsupportedLookAndFeelException另一个包中声明,所以你要确保包括来自javax.swing中的一个包,所以在这种情况下它是明确的。如上所述,您最好的选择是让IDE帮助您明确选择您想要的导入。

2

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

但是,使用您需要了解可能的阶级冲突在这个计算器线程解释第一种方式时:Eclipse/Java - is it harmful to import java.(namespace).*?

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