什么是更好的:逐个导入或。*?

时间:2014-08-12 09:36:28

标签: java import

我正在为一个学校项目忙于一个小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语句,编译过程可能需要更多时间     为了提高可读性,通配符导入语句对于除>>一次性类之外的任何操作都是不好的做法     非通配符导入语句的编译开销很小,但它们提供了可读性优势,因此最佳实践是使用它们

  

3 个答案:

答案 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}}。

导入语句的数量实际上不是很大的问题 - 是的,它可能有很多行,但是它确实会对代码的可读性造成任何损害吗?不是真的。

我希望这会有所帮助。