21

Java 中的“import”的行为方式是否与 C/C++ 中的“#include”相同?具体来说,它会包括它正在导入的整个库,还是只包括在后续代码中调用的类和方法?

4

9 回答 9

26

#include两者都不做,既不是“导入”库,也不是类或模块。

#include指令只是告诉预处理器包含另一个文本文件(源)的内容。就这样。

预处理文件 A 和#include文件 B 的结果被传递给编译器,就好像它们是一个文件一样,文件 B 粘贴到文件 A 中#include放置指令的位置。

明确地说:这一切都发生任何编译、代码生成之前。

作为副作用,可以独立于编译器使用 C/C++ 预处理器来处理任何类型的文本文件输入。

#include有人可能会争辩说,像“实际上并不是 C/C++ 语言的一部分”这样的预处理器语句,因为它们本质上不需要用 C/C++ 编写任何程序,因为它们永远不会传递给编译器。

该表达式import不在(标准)C/C++ 编程的上下文中使用,因为没有要导入的内容。

C/C++ 模块在编译之前在源代码级别或在编译之后由链接器组合在一起。

于 2012-11-22T17:34:45.410 回答
11

#include<stdio.h>意味着在这个文件中复制 stdio.h 的内容,而import java.util.ArrayList意味着如果你在这个文件中找不到一个类,请查看上面提到的导入位置。Java 导入不会增加文件的大小,它只会节省一些击键。

于 2015-05-11T07:46:22.990 回答
7

在 Java 中,当您使用 时import,您可以导入:

  • 一个班级:import foo.bar.Baz
  • 一个完整的包:import foo.bar.*
  • 类的单个静态成员:import static foo.bar.Baz.GRUT
  • 类的每个静态成员:import static foo.bar.Baz.*
于 2012-11-22T17:35:06.097 回答
2

C/C++#include指令发生在预处理阶段,用简单的英语表示“在此位置粘贴作为参数给出的整个头文件(或任何文本文件,如果你愿意)”。新的 C++ 标准将具有模块(最终),并且可能类似于也可能不类似于 Java 的导入(取决于它将如何实现)。有关此 C++ 提案的更多信息:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3347.pdf

Java 8 还将改进对模块化编程的支持。见: http: //openjdk.java.net/projects/jigsaw/

于 2012-11-22T18:07:51.620 回答
1

我认为关于 c 的其他答案可能尚未明确的一个方面是,

include in c 只复制包含函数原型的预处理器阶段的头文件,仅此而已。在基本代码编译之后,实际的函数定义仍然位于链接时。

可以通过包含头文件而不是源文件并从代码中调用函数来完成简单的验证。不会有编译错误,只有在链接时它会抱怨无法找到定义

于 2013-10-25T05:42:21.807 回答
0

取决于您实际导入的内容。最小的可导入实体是类,最大的是包。
因此,如果您需要一个类并导入完整的包,它将带入完整的包。

于 2012-11-22T17:34:35.130 回答
0

import(在 Java 中)类似于 using(在 C++ 中) - 正如您所了解的,它们并不完全相同,但非常相似。

import 是指示编译器在哪里可以找到当前类中使用的类(或子包)。

包括 - 斯文在这里解释得更好 - https://stackoverflow.com/a/3739563/135553

于 2016-07-01T05:14:51.030 回答
-1

笼统 :

在c语言中,当编译器遇到#include语句时,所有指定的头文件都会在include语句的时候被加载,而不管我们是否使用这些头文件。因此它被称为静态绑定。

但是对于 java 语言,当编译器遇到 import 语句时,不会在 import 语句时加载 .class 文件。在接下来的代码行中,每当我们当时使用一个类时,只会加载相应的 .class 文件。这种类型的加载称为动态加载或按需加载或动态加载。

于 2018-04-21T07:06:41.923 回答
-2

include 通常指 C、C++ 语言,它们是平台相关的语言,需要直接编译、链接和加载到架构的机器指令集上,但 import 指的是 java 语言,它是平台无关的,它可以生成字节码,然后可以解释为二进制码格式。

于 2013-12-14T05:01:57.197 回答