C / C ++(dll)与JAVA(JAR)

时间:2016-04-15 12:05:41

标签: java c++ dll dynamic-linking

我是java编程的新手。

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

这是我的问题,他们如何在java编程中管理它,因为它不包含任何头文件。它只有.java文件,这些文件被组合在一起并创建了JAR文件。当我想在另一个项目中使用这个jar文件时我们使用“package”或“import”关键字但是当它说导入总文件将导入逻辑和链接器如何在编译步骤中进行管理?

2 个答案:

答案 0 :(得分:3)

  

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

它通过在.class文件中放置编译所需的所有信息以及运行时(以及可能的调试)来管理它,因此不需要其他信息。

源和javadoc通常也放在JAR中(有时是相同的JAR)

  

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

你不必。这只是一个简短的手。您可以使用完整package.ClassName,而不需要import。注意:这不会导入任何代码或数据,只允许您为类使用较短的名称。

e.g。

之间没有区别
java.util.Date date = new java.util.Date();

import java.util.Date;

Date date = new Date(); // don't need to specify the full package name.
  

表示导入的总文件将以逻辑

导入

没有办法,也没有必要这样做。例如,#include没有任何内容,内联仅在运行时发生,而不是在编译时发生(编译时已知的常量除外)

  

链接器如何在编译步骤中进行管理

在运行时执行链接和编译到本机代码。所有javac编译器都会检查代码的有效性并生成字节代码供JVM读取。

答案 1 :(得分:1)

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

  2. 在许多方面(新语言),二元编译时间与运行时间都会丢失(主要是因为它们具有强烈反射)。 Java类或JAR(或C#程序集)具有编译所需的信息(类似于声明)。 Java环境不需要特殊的“编译文件”。相同的JAR是'compile file'和'runtime binary dll'

  3. 使用.H,.C,.LIB文件的典型C思考进入利基(恕我直言 - 我是老C程序员,我对新语言感觉很好)