我正在为一个学校项目忙于一个小Java程序,我的导入列表变得越来越长。这让我想知道一次导入所有内容是否更好:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
或者逐个导入必要的类:
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.event.ComponentListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Point;
我可以想象,对于非常大的项目,导入列表可能会变得非常长。那么有任何性能考虑因素吗?
找到答案here,郭松提供的链接:
import指令是一个编译器指令,它告诉编译器在哪里查找类,并且不必总是使用完全限定的类名,例如java.util.HashMap中。但是import指令本身并没有放入已编译的字节码文件中,编译器会将完全限定的名称编译到.class文件中。
当使用没有通配符时,该指令显式地告诉编译器在类路径中查找一个特定文件。使用通配符,该指令告诉编译器查找命名包,并在每次需要匹配任何名称时在该包中搜索可能的匹配项。对于编译器而言,后一版本可能比前者更长(
)换句话说,import指令不会以任何方式影响运行时代码的执行。但是,import指令确实会影响编译时间。另外,我发现使用带通配符的import会降低代码的可读性。
实际上,javaperformancetuning.com上月份的进口报表成本问题在结论中完美地总结了这一点:
使用import语句没有运行时成本 使用import语句,编译过程可能需要更多时间 使用通配符import语句,编译过程可能需要更多时间 为了提高可读性,通配符导入语句对于除>>一次性类之外的任何操作都是不好的做法 非通配符导入语句的编译开销很小,但它们提供了可读性优势,因此最佳实践是使用它们
答案 0 :(得分:1)
它不会影响程序的运行时间速度。
但它会影响程序的COMPILE TIME SPEED。
如果导入java.sql。*然后在编译时编译器逐个导入包,那么编译时就会有开销
但是在运行时编译器会忽略编译器在编译时导入的所有未使用的import语句,因此它不会影响程序的RUN TIME速度。
通常最好使用完全限定名称导入而不是导入所有列表,这样可以提高代码的可读性和可维护性。
让我们看一个简单的案例:
import java.util.*;
和
import java.util.ArrayList;
import java.util.List;
//.when we write a program :..
List <String> someList = new ArrayList <String> ();
//...
当编译器命中单词List时,在第一种情况下,它需要弄清楚List是否存在于那组类中。在第二种情况下,已经明确地给出了它,因此它更容易。
答案 1 :(得分:0)
在我的意见中,您应该逐个导入它们:
答案 2 :(得分:0)
这只是因为您现在可能没有代码冲突,但如果您要导入的软件包稍后更新,则会添加一个与您个人编写的类名相同的新类它会破裂。
性能不是这个问题的主要问题,因为它不应该使代码运行更慢,但它可能会增加.class
个文件的大小或{{ 1}}。
导入语句的数量实际上不是很大的问题 - 是的,它可能有很多行,但是它确实会对代码的可读性造成任何损害吗?不是真的。
我希望这会有所帮助。