C/C+中的动态链接+;(dll)vs JAVA(JAR)

C/C+中的动态链接+;(dll)vs JAVA(JAR),java,c++,dll,dynamic-linking,Java,C++,Dll,Dynamic Linking,我是java编程新手 基本上,当我们在c/c++编程中工作时,我们使用.h和.c文件创建dll文件,其中.h文件包含声明,.c文件包含这些类和函数的定义。 当我们想在其他项目中使用创建的.dll文件的这些功能时,我们在预处理器声明中包含.h,以告知编译器变量和函数的声明,并在编译期间提供各自的dll文件路径,以便在链接器阶段它与dll通信 我的问题是,由于java编程不包含任何头文件,他们如何在java编程中管理它。当我想在另一个项目中使用这个JAR文件时,我们使用“package”或“impo

我是java编程新手

基本上,当我们在c/c++编程中工作时,我们使用.h和.c文件创建dll文件,其中.h文件包含声明,.c文件包含这些类和函数的定义。 当我们想在其他项目中使用创建的.dll文件的这些功能时,我们在预处理器声明中包含.h,以告知编译器变量和函数的声明,并在编译期间提供各自的dll文件路径,以便在链接器阶段它与dll通信

我的问题是,由于java编程不包含任何头文件,他们如何在java编程中管理它。当我想在另一个项目中使用这个JAR文件时,我们使用“package”或“import”关键字,但当它说import total file将用逻辑导入时,链接器在编译步骤如何管理

因为它不包含任何头文件,所以在java编程中如何管理它

它通过将编译类和运行时(以及可能的调试)所需的所有信息放在
.class
文件中来管理这一点,因此不需要额外的信息

通常源代码和javadoc也放在JAR中(有时是同一个JAR)

当我想在另一个项目中使用这个jar文件时,我们使用“package”或“import”关键字

你不必这么做。这只是一个简短的例子。您可以使用完整的
包.ClassName
,无需导入
。注意:这不会导入任何代码或数据,只允许您为类使用较短的名称

e、 g.两者之间没有区别

java.util.Date date = new java.util.Date();

当它说import total时,将使用逻辑导入文件

没有办法,也没有必要这样做。例如,没有什么能像
#include
那样,内联只发生在运行时,而不是编译时(编译时已知的常量除外)

链接器在编译阶段如何管理

链接和编译到本机代码是在运行时执行的。Java C编译器所做的一切就是检查代码的有效性,并生成字节码供JVM读取

因为它不包含任何头文件,所以在java编程中如何管理它

它通过将编译类和运行时(以及可能的调试)所需的所有信息放在
.class
文件中来管理这一点,因此不需要额外的信息

通常源代码和javadoc也放在JAR中(有时是同一个JAR)

当我想在另一个项目中使用这个jar文件时,我们使用“package”或“import”关键字

你不必这么做。这只是一个简短的例子。您可以使用完整的
包.ClassName
,无需导入
。注意:这不会导入任何代码或数据,只允许您为类使用较短的名称

e、 g.两者之间没有区别

java.util.Date date = new java.util.Date();

当它说import total时,将使用逻辑导入文件

没有办法,也没有必要这样做。例如,没有什么能像
#include
那样,内联只发生在运行时,而不是编译时(编译时已知的常量除外)

链接器在编译阶段如何管理

链接和编译到本机代码是在运行时执行的。Java C编译器所做的一切就是检查代码的有效性,并生成字节码供JVM读取

  • 在现代语言中,Java(&C#)不区分声明和定义,因此.H文件的概念在这些语言中已经消失了

  • 在许多方面(新语言),编译时与运行时之间的二元论丢失了(主要是因为它们具有强烈的反射)。Java类或JAR(或C#程序集)具有编译所需的信息(类似于声明)。Java环境不需要特殊的“编译文件”。同一个JAR是“编译文件”和“运行时二进制dll”

  • 对于.H、.C、.LIB文件,典型的C语言思维方式是利基(IMHO-我是老C程序员,对新语言感觉很好)

  • 在现代语言中,Java(&C#)不区分声明和定义,因此.H文件的概念在这些语言中已经消失了

  • 在许多方面(新语言),编译时与运行时之间的二元论丢失了(主要是因为它们具有强烈的反射)。Java类或JAR(或C#程序集)具有编译所需的信息(类似于声明)。Java环境不需要特殊的“编译文件”。同一个JAR是“编译文件”和“运行时二进制dll”


  • 对于.H、.C、.LIB文件,典型的C思维方式是利基(IMHO-我是老C程序员,我对新语言感觉很好)

    对于C/C++,你犯了一个很大的错误:链接器根本不关心DLL。它需要一个导入库(LIB)来解析符号。Java的答案非常简单:所有类型信息都包含在JAR文件中,类似于.NET Assemblys.JAR是存档文件,类似于zip,您可以从中提取Java类文件。@KerrekSB我猜,我已经用密码完成了。o_OYou对于C/C++来说,这是非常错误的:链接器根本不关心DLL。它需要一个导入库(LIB)来解析符号。Java的答案非常简单:所有类型信息都包含在JAR文件中,类似于.NET Assemblys.JAR是存档文件,类似于zip,您可以从中提取Java类文件。@KerrekSB我猜,我已经用密码完成了。欧欧欧