Java:访问包中的类,这是更好的方法吗?

时间:2011-03-20 02:40:14

标签: java import packages

如果我使用完全限定名称访问包中的类而不导入它,是否可以保存任何内存?

使用完全限定的类名:

java.lang.Math.sqrt(x);

导入包:

import java.lang.Math;

Math.sqrt(x);

这是更好的方法:使用完全限定名称导入包或访问?

感谢你......

5 个答案:

答案 0 :(得分:10)

导入包或使用完全限定的类名之间没有性能差异。 import指令未转换为Java字节代码,因此对运行时性能没有影响。唯一的区别是它可以节省您的时间,以防您多次使用导入的类。这是一本很好的阅读here

答案 1 :(得分:7)

不,它不能挽救你的记忆。

另请注意,您根本不必导入Mathjava.lang中的所有内容都会自动导入。

一个更好的例子就像是ArrayList

import java.util.ArrayList;
....
ArrayList<String> i = new ArrayList<String>();

注意我是专门导入ArrayList的。我本可以做到

import java.util.*; 

但是您通常希望避免使用大型通配符导入以避免包之间发生冲突。

答案 2 :(得分:4)

他们是等同的。访问是相同的。

导入只是一种约定,可以使您不必每次都输入完全解析的类名。只要你是一个快速触摸的人,你就可以在不使用导入的情况下编写所有Java。

但效率或类加载没有区别。

答案 3 :(得分:2)

如前所述,在运行时没有区别(在类文件中它始终是完全限定的,并且在加载和链接类之后有指向被引用方法的直接指针),以及java.lang中的所有内容自动导入包,就像当前包中的所有内容一样。

编译器可能需要更长时间搜索几微秒,但这不应成为理由 - 决定人类读者的易读性。

顺便说一下,如果你使用了很多静态方法(例如来自Math),你也可以写

import static java.lang.Math.*;

然后使用

sqrt(x)

直接。但是,只有当你的类很重,并且它确实有助于更大的公式的可读性时才这样做,因为读者(作为编译器)首先会在同一个类中搜索,也可能在超类中搜索。 (这同样适用于其他静态方法和静态变量(或常量)。)

答案 4 :(得分:0)

导入包是为了更好的可读性;

必须在特殊情况下使用完全限定类。例如,不同包中的相同类名,或使用反映,如Class.forName()