由于我还不熟悉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.*;
我误解了什么吗?或者我只是找到冗余?
答案 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).*?
由于我更喜欢第二种方法,因为我可以明确告诉我打算使用哪个类,并以这种方式使代码更易于阅读