Java中的进口

时间:2013-08-15 06:20:28

标签: java

我读过与C / C ++不同的东西,当我们" import"他们实际上没有添加的软件包(它们被引用而不是嵌入式)到类文件中。

因此有什么性能影响?

我很好奇可能会因为引用的数据(来自软件包)在.class本身中不可用而导致的开销(调用引用的软件包......等)。

或者开销非常小?

4 个答案:

答案 0 :(得分:5)

没有性能命中。它只影响编译器解析类型的方式;对生成的字节代码或运行时可用的信息没有影响。它几乎完全等同于C ++中的using [namespace](其中包就像命名空间一样)。

与C ++一样,您也可以使用其包完全限定类型,而不是导入它。

C ++:

Something::Whatever x = ...;
// or
using namespace Something;
Whatever x = ...;

爪哇:

com.something.Whatever x = ...;
// or
import com.something.*;
Whatever x = ...;

您可以(也应该)导入特定类型:

C ++:

using Something::Whatever;

爪哇:

import com.something.Whatever;

与C ++一样,同一个包中的类可以相互引用,而无需限定包名。

请注意,与C ++ using namespace不同,import必须位于文件的顶部。另外,包名称直接反映了源相对于类路径的目录结构(路径分隔符用点替换);因为类可以用Java动态加载,所以包名也指定了类加载器在文件系统中查找类的位置。

另外,要选择尼特,C中没有这样的概念。

答案 1 :(得分:2)

添加包没有性能开销成本。但是,您不应该只是在代码中导入不必要的包。有时会有相同名称但在不同包中的类,因此您将遇到不必要的问题。

从良好的编码实践中,只使用你需要的东西,没有什么是好的。所以导入类而不是完整的包。

几乎所有的IDE都具有组织导入的功能,因此您实际上不需要记住包和类的完整路径。只需使用IDE功能并保持代码清洁。

答案 2 :(得分:1)

Java类加载器仅在需要时才将类加载到内存中。它不会在导入后将类加载到内存中,请参阅此answer.这没有“性能缺点”......当需要访问类的字节码时,内存中的地址几乎肯定会在恒定时间内被检索。

答案 3 :(得分:1)

import没有任何性能开销。至少JLS没有提到

  

导入声明通过简单的方式使类型或成员可用   仅在实际包含的编译单元内的名称   进口申报

相关问题