如果 Java 没有预处理器,那么 "import" 是什么意思?

7

这篇文章指出,在2.2.1中C++已经不再使用typedefs、defines或预处理器。在C++中,include是预处理器的一部分。那么import是什么呢?


1
值得注意的是,在C++中更相似的关键字是using - user545680
@Bringer128 using 是 C# 的一部分,而不是 C++。在 C/C++ 中,应该使用 #include "..." 或者 include <...> :) - Bakudan
1
我指的是这个关键字 - user545680
5个回答

13

尽管名称为“import”,但Import并不会真正“导入”任何内容,它只是让你能够调用类而无需使用完整限定名。

更明确地说,如果我执行import java.util.ArrayList;,现在我可以直接使用ArrayList类来引用ArrayList。如果我不这样做,我仍然可以使用该类,但必须将其称为java.util.ArrayList

如果您使用*导入整个包,最糟糕的情况是可能存在名称冲突,因此您必须使用完全限定名来引用Java类,但运行时不会使用更多内存。

java.lang中的类会自动“导入”。

Java 1.5引入了静态导入(static imports),它使程序员能够像在使用它们的类中声明它们一样引用已导入的静态成员。应该谨慎使用它们。 JUnit Assert方法的导入是一个可接受的用途。例如,使用传统导入:

import org.junit.Assert;
...
Assert.assertEquals(expected, actual);

使用静态导入:

import static org.junit.Assert.assertEquals;
...
assertEquals(expected, actual);

2

Import允许您使用未经限定的类名。例如,使用import java.util.ArrayList,您可以在代码中使用未经限定的类型名称ArrayList。如果没有导入语句,您将不得不始终使用完全限定的名称:java.util.ArrayList

还有静态导入,它将静态类元素带入编译单元的命名空间中。


1
由于Java编译器有严格的源代码命名约定,它可以轻松地从包和类的完全限定名称中找到相应的源文件或类文件。在此处的“完全限定名称”指的是指定完整包和类的名称,例如:
java.util.ArrayList x = new java.util.ArrayList ();

避免这种冗长的编码风格的替代方法是使用导入语句。

import java.io.*;
import java.util.ArrayList;
ArrayList x = new java.util.ArrayList();

同时,理解他人的代码也是非常有帮助的。


1

import 语句用于在文件中引入包名,使其可被使用。它与 C 语言的 #include 完全不同。


0

如何告诉编译器你正在使用来自另一个包的某个类?

编辑: 规范链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接