大家在import的时候是用“*”还是具体写引用什么?

时间:2021-02-02 18:08:22
这两种有什么大的区别?我习惯于用“*”,因为具体引用类,可能想不周全,容易出错,浪费时间,如果是引用“*”,可能编译执行效率低一些,但我想也低不到哪里去吧?

9 个解决方案

#1


我也用*

#2


好象用*对效率没有影响吧?

#3


对于一些jdk自带的包。我会用*

但是在工作中,如果系统多性能要求比较高的时候,或是用到自己开发的包的时候,会用具体引用类,节省装载时间!

#4


如果你能确定需要引用的类包那当然是将具体的包引用近来就好了,这样可以提高装载的速度,否则还是用*吧

#5


我认为两种写法没有任何区别,假设我有一个这样的类:
import java.util.*;

public class Test {
public static void main(String [] args) {
Vector test = new Vector();
}
}

#6


在import的时候是用“*” 只对编译时的效率有影响,对运行效率没有影响。因为编译时需要在路径去寻找匹配的类名,而编译后的class文件里会自动在你的类名中加上全称,如编码时写 Vector,而在生成的class文件中会写成java.util.Vector 。
所以大可不必担心运行效率。
在import的时候是用“*” 要注意的问题只是要小心类名相同造成编译错误,而且大部分的开发工具都会有提示。
我还是喜欢用 *

#7


对不起,按错键了。呵呵
继续上面的用javap反变异由javac产生的Test.class,结果:
Compiled from Test.java
public class Test extends java.lang.Object {
    public Test();
    public static void main(java.lang.String[]);
}

Method Test()
   0 aload_0
   1 invokespecial #1 <Method java.lang.Object()>
   4 return

Method void main(java.lang.String[])
   0 new #2 <Class java.util.Vector>
   3 dup
   4 invokespecial #3 <Method java.util.Vector()>
   7 astore_1
   8 return

看到了吗?Java的编译器会自动把这个类的绝对路径加上去,而且还注意到了吗?根本上就是忽略了第一句“import java.util.*;”

然后,我把上面的Test类改成如下:
import java.util.Vector;

public class Test {
public static void main(String [] args) {
Vector test = new Vector();
}
}

Compiled from Test.java
public class Test extends java.lang.Object {
    public Test();
    public static void main(java.lang.String[]);
}

Method Test()
   0 aload_0
   1 invokespecial #1 <Method java.lang.Object()>
   4 return

Method void main(java.lang.String[])
   0 new #2 <Class java.util.Vector>
   3 dup
   4 invokespecial #3 <Method java.util.Vector()>
   7 astore_1
   8 return

你可以用UltraEdit比较一下,根本没有区别!
所以,我认为写成类的绝对路径只有两个好处:

1.更加明确,不会出现:假如你有一个类名叫:com.myself.Vector,这个Package在Java编译器可以找得到的地方。如果你的程序里这样写:
import java.util.*;
import com.myself.*;
那么Java编译器会报错,它不知道你要用哪一个Vector类,是自己的还是Sun的。

2.明确写成类的绝对名称,可以加快编译的速度,但是并不能提高运行速度!(不要想当然)

我说完了,各位开骂

#8


我同意ganh(水水水)!


其实,应该是我先贴出来的。因为要写例子,比你慢了!呵呵!

#9


同意ganh(水水水)!

#1


我也用*

#2


好象用*对效率没有影响吧?

#3


对于一些jdk自带的包。我会用*

但是在工作中,如果系统多性能要求比较高的时候,或是用到自己开发的包的时候,会用具体引用类,节省装载时间!

#4


如果你能确定需要引用的类包那当然是将具体的包引用近来就好了,这样可以提高装载的速度,否则还是用*吧

#5


我认为两种写法没有任何区别,假设我有一个这样的类:
import java.util.*;

public class Test {
public static void main(String [] args) {
Vector test = new Vector();
}
}

#6


在import的时候是用“*” 只对编译时的效率有影响,对运行效率没有影响。因为编译时需要在路径去寻找匹配的类名,而编译后的class文件里会自动在你的类名中加上全称,如编码时写 Vector,而在生成的class文件中会写成java.util.Vector 。
所以大可不必担心运行效率。
在import的时候是用“*” 要注意的问题只是要小心类名相同造成编译错误,而且大部分的开发工具都会有提示。
我还是喜欢用 *

#7


对不起,按错键了。呵呵
继续上面的用javap反变异由javac产生的Test.class,结果:
Compiled from Test.java
public class Test extends java.lang.Object {
    public Test();
    public static void main(java.lang.String[]);
}

Method Test()
   0 aload_0
   1 invokespecial #1 <Method java.lang.Object()>
   4 return

Method void main(java.lang.String[])
   0 new #2 <Class java.util.Vector>
   3 dup
   4 invokespecial #3 <Method java.util.Vector()>
   7 astore_1
   8 return

看到了吗?Java的编译器会自动把这个类的绝对路径加上去,而且还注意到了吗?根本上就是忽略了第一句“import java.util.*;”

然后,我把上面的Test类改成如下:
import java.util.Vector;

public class Test {
public static void main(String [] args) {
Vector test = new Vector();
}
}

Compiled from Test.java
public class Test extends java.lang.Object {
    public Test();
    public static void main(java.lang.String[]);
}

Method Test()
   0 aload_0
   1 invokespecial #1 <Method java.lang.Object()>
   4 return

Method void main(java.lang.String[])
   0 new #2 <Class java.util.Vector>
   3 dup
   4 invokespecial #3 <Method java.util.Vector()>
   7 astore_1
   8 return

你可以用UltraEdit比较一下,根本没有区别!
所以,我认为写成类的绝对路径只有两个好处:

1.更加明确,不会出现:假如你有一个类名叫:com.myself.Vector,这个Package在Java编译器可以找得到的地方。如果你的程序里这样写:
import java.util.*;
import com.myself.*;
那么Java编译器会报错,它不知道你要用哪一个Vector类,是自己的还是Sun的。

2.明确写成类的绝对名称,可以加快编译的速度,但是并不能提高运行速度!(不要想当然)

我说完了,各位开骂

#8


我同意ganh(水水水)!


其实,应该是我先贴出来的。因为要写例子,比你慢了!呵呵!

#9


同意ganh(水水水)!