各位高手,为什么import 最好详细指明到类,不要用.*这样的方式?在运行时那种import更有效率?

解决方案 »

  1.   

    不是很在意这个JBuilder不是就有一个优化import功能吗, 全都变成 .* 了,呵呵
      

  2.   

    运行时一样,import详细指明到类,习惯问题
      

  3.   

    运行时的效率应该一样的;详细到类主要的好处是避免同名类的冲突;如:
    java.sql.Date;
    java.util.Date;
    如果你都用到了两个包中的其它类;并且也用到了date类;那么你写成
    import java.sql.*;
    import java.util.*;在用到date类的时候就会产生冲突,编译器不知道该用那个date类了
      

  4.   

    我是初学者,想有个权威的说法,决定将来到底用哪种import.这个问题一直困扰着我。
      

  5.   

    不管用不用* 编译后的Class文件中都是具体的一个.用*只是在编译成Class文件的时候慢一点.运行的时候速度都是一样的.
      

  6.   

    用import * 的话 你在编译执行的时候,类加载器(classloader)就会加载包下所有的class类文件。也许你的代码里只用到了1个类。但是他加载了100个类 你觉得是不是浪费资源呢? 呵呵
      

  7.   

    没有运行效率之差,更和classloader扯不上关系。
    import 相当于C++里面的using namespace,只是为了少写一些重复代码而已。完全不会加载所import的类。另外同时
    import java.sql.*;
    import java.util.*;
    会造成Date类使用冲突。
    那么
    import java.sql.Date;
    import java.util.Date;
    也是解决不了这个问题的,直接用Date仍然会有冲突。
    这与用不用*是没有关系的。总的来说,import时用不用*,只有可读性上的差别,import类名,可以让代码阅读者清楚地看到你的代码中使用了哪些类。除此以外,没有任何差别。
      

  8.   

    还有哦,假如你
    import a.*;
    import b.*;
    然后你用到了一个TClass,那么我看到这个TClass的时候就不知道TClass是a里的还是b里的了^^
      

  9.   

    我觉得还是 loveyt(咆哮的独角兽^大家都在长大) 提出的问题最重要,可读性。为了方便别人(将来需要读你程序的人),也为了方便自己,程序的可读性很重要。对于 OutputStream、ArrayList 之类的东西,大家都很熟悉,完全可以用 *,如果是一些不太常见的类,还是用具体的类名做 import 比较清楚。楼主大可不必拘泥于一定要选择其中一种,具体情况具体分析嘛。
      

  10.   

    如果你的类里面同时需要一个包中的多个类..那你可以直接写.*的格式,如:
    import java.io.*;如果你只是用到了一个包中一个类或极少的类..而使用了.*方式的话..这样子就会导致效率低下问题,,因为程序在开始便要加载整个包..而你用到的仅仅是里面一两个类. 所以这种情况下建议你直接import 类名.效率会好些.to:  二楼kevinliuu(@。@) JB中的import优化也是根据这个原理来优化的.如果你的类中使用一个包中的类的数量超过"一定数量",,它就自动优化为import .* ;这个"一定数量"完全由你自己设定.比如你可以设置为3,那么import优化器检查你的import 语句,,发现你使用一个包中的类超过3个时自动优化为.*;例在你的程序中有;
    import java.util.Date;
    import java.util.Arrays;
    import java.util.Calendar;
    import java.util.Currency;如果你此时用import优化的话,它会优化成import java.util.*;
    具体怎么设置import优化请参考JB HelpDoc
    所以结论是:import .classname;

    import .*;
    效率是不同的,,特别是当你只用到包中的极少个类的时候,,两都效率成反比/.
      

  11.   

    To:  YidingHe(机枪兵) 
    直接import .classname;使用它的理由并不是告诉别人,你使用的类是哪里来的?
      

  12.   

    呵呵,同意楼上的
    一般在项目中都直接到class!
      

  13.   

    我觉得好多人都没有说到点上,这涉及ClassLoader加载问题;加载一个类和为了一个类而加载一个包下的所有类的性能和效率,我想是不言自明的;
    并不是为了代码的阅读性,
      

  14.   

    import 到一个具体的类.
    这是标准的写法
    因为java虚拟机在加载类的时候,就不要再去找匹配的了.
      

  15.   

    To:Dan1980()import java.sql.*;
    import java.util.*;
    会造成Date类使用冲突。
    那么
    import java.sql.Date;
    import java.util.Date;
    也是解决不了这个问题的,直接用Date仍然会有冲突。
    这与用不用*是没有关系的。
    =======================================================
    import java.sql.Date;
    import java.util.Date;
    一个神智正常的程序员会这么写???实际的项目中通常是这个样子
    import java.sql.Connection;
    import java.PreparedStatment;
    import java.Statement;
    import java.ResultSet;
    import java.util.*;========================================实际的工作中如何书写不是一成不变的,要根据实际情况灵活掌握!
      

  16.   

    运行时的效率是完全相同的,这很好验证,看下面这两个只有import语句不一样的文件 import java.util.*;public class Test
    {
      public static void main(String[] args) {
        ArrayList a = new ArrayList();
        for (int i = 0; i < a.size(); i++) {
          a.add(args[0]);
        }
      }
    }import java.util.ArrayList;public class Test
    {
      public static void main(String[] args) {
        ArrayList a = new ArrayList();
        for (int i = 0; i < a.size(); i++) {
          a.add(args[0]);
        }
      }
    }把这两个文件分别编译,生成两个Test.class文件,然后用一个支持二进制的编辑器打开比较一下,比如用UltraEdit,你会发现两个class文件是完全相同的,运行这两个class文件时的效率当然也肯定是完全相同的。
      

  17.   


    1.编译时的效率。(不影响运行时)
    2.代码的可读性。
    3.避免命名冲突。
    to gtlang78() :
    最好举个例子证明编译时效率不一样!
      

  18.   

    在pc机上的桌面程序效率差别不明显,但是如果是网络上加载或是手机、pda等设备上的效率差别很大,冲突也是另一方面的原因
      

  19.   

    只有编译时的区别,在编译后的字节码里,对类的引用都是全名,不信你就去看JVM实现文档
      

  20.   

    搞个大点的循环,然后一个加上类名,一个用*,看看执行效率会有什么不一样,不就可以了可以用for(i=1;i<1000000;i++)
    Date date=new Date();
    输出date试试不就知道了马上计时开始!
      

  21.   

    to nirvana_li(东成西就,芝兰境界1.编译时的效率。(不影响运行时)
    2.代码的可读性。
    3.避免命名冲突。1.编译时效率我还没有细究过
    2.看看下面两种写法代码的可读性哪种好,还要简洁性
    import a.b.a;
    import a.b.b;
    import a.b.c;
    import a.b.d;
    import a.b.e;
    import a.b.f;
    import a.b.g;
    import a.b.h;
    import a.b.i;
    import a.b.j;
    import a.b.k;

    import a.b.*;
    3.当
    import java.util.Date;
    import java.sql.Date;
    时你的代码里写成
    Date date;
    还能编译吗?
      

  22.   

    @crazycy(崔毅): 一个类在编译时,如果他不需要某个类,声明了却没有使用,那么这个不被使用的类,就不会加载!
    因为加载时在运行时。jvm使用的延迟加载,只有在用到的时候才会被加载!把a.java文件编译的时候,javac只会把它用到的类,一全包名的形式,写到a.class的类常量池里面。关键是程序的可读性。推荐看王森的《深入java虚拟机》可以看看,他里面有专门的一章讲import机制的。
      

  23.   

    用.*只是增加的编译的时间。。编译器用找到你要用的类写入到.class文件中
      

  24.   

    Eclipse开发中,你只要按一下Ctrl+1就可以帮你详细指明到类
      

  25.   

    是有点模糊的。
    现在的争议主要是 这样对编译时的效率有没有影响?答案肯定有,但实际也不一定非要按那样去做。
    一般的编程守则对于IMPORT规定如下:
    jdk自己的,都用.*
    自己的包,如果用到五个以上,则用.*兼顾可读性,简洁性。