为什么80%的码农都做不了架构师?>>>

本教程是关于什么的?

Java 本机接口(Java Native Interface (JNI))是一个本机编程接口,它是 Java 软件开发工具箱(Java Software Development Kit (SDK))的一部分。JNI 允许 Java 代码使用以其它语言(譬如 C 和 C++)编写的代码和代码库。Invocation API(JNI 的一部分)可以用来将 Java 虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用 Java 代码。

本教程涉及 JNI 最常见的两个应用:从 Java 程序调用 C/C++,以及从 C/C++ 程序调用 Java 代码。我们将讨论 Java 本机接口的这两个基本部分以及可能出现的一些更高级的编程难题。

我应该学习本教程吗?

本教程将带您去了解使用 Java 本机接口的所有步骤。您将学习如何从 Java 应用程序内部调用本机 C/C++ 代码以及如何从本机 C/C++ 应用程序内部调用 Java 代码。

所有示例都是使用 Java、C 和 C++ 代码编写的,并可以移植到 Windows 和基于 UNIX 的平台上。要完全理解这些示例,您必须有一些 Java 语言编程经验。此外,您还需要一些 C 或 C++ 编程经验。严格来说,JNI 解决方案可以分成 Java 编程任务和 C/C++ 编程任务,由不同的程序员完成每项任务。然而,要完全理解 JNI 是如何在两种编程环境中工作的,您必须能够理解 Java 和 C/C++ 代码。

我们还将讲述一些高级主题,包括本机方法的异常处理和多线程。要充分理解本教程,您应该熟悉 Java 平台的安全性模型,并有一些多线程应用程序开发的经验。

这里将关于高级主题 的节从较基本的循序渐进 JNI 简介中划分出来。现在,初级 Java 程序员可以先学习本教程的前两部分,掌握之后再开始学习高级主题。

请参阅参考资料,那里有关于本文所提到的教程、文章和其它一些参考书目的清单。

工具与组件

要运行本教程中的示例,您需要下列工具与组件:

* Java 编译器:随 SDK 一起提供的 javac.exe。

* Java 虚拟机(JVM):随 SDK 一起提供的 java.exe。

* 本机方法 C 文件生成器:随 SDK 一起提供的 javah.exe。

* 定义 JNI 的库文件和本机头文件。jni.h C 头文件、jvm.lib 和 jvm.dll 或 jvm.so 文件,这些文件都是随 SDK 一起提供的。

* 能够创建共享库的 C 和 C++ 编译器。最常见的两个 C 编译器是用于 Windows 的 Visual C++ 和用于基于 UNIX 系统的gcc。

虽然您可以使用自己喜欢的任何开发环境,但我们将在本教程中使用示例是用随 SDK 一起提供的标准工具和组件编写的。请参阅参考资料来下载 SDK、完整的源文件以及对于完成本教程不可缺少的其它工具。本教程具体地解释了 Sun 的 JNI 实现,该实现被认为是 JNI 解决方案的标准。本教程中没有讨论其它 JNI 实现的详细信息。

其它注意事项

在 Java 2 SDK 中,JVM 和运行时支持位于名为 jvm.dll(Windows)或 libjvm.so(UNIX)的共享库文件中。在 Java 1.1 JDK 中,JVM 和运行时支持位于名为 javai.dll(Windows)或 libjava.so(UNIX)的共享库文件中。版本 1.1 的共享库包含运行时以及类库的一些本机方法,但在版本 1.2 中已经不包含运行时,并且本机方法被放在 java.dll 和 libjava.so 中。对于以下 Java 代码,这一变化很重要:

* 代码是用非 JNI 本机方法编写的(因为使用了 JDK 1.0 中旧的本机方法接口)

* 通过 JNI Invocation 接口使用了嵌入式 JVM

在两种情况下,在您的本机库能与版本 1.2 一起使用之前,都必须重新链接它们。注:这个变化应该不影响 JNI 程序员实现本机方法 ― 只有通过 Invocation API调用 JVM 的 JNI 代码才会受到影响。

如果使用随 SDK/JDK 一起提供的 jni.h 文件,则头文件将使用 SDK/JDK 安装目录中的缺省 JVM(jvm.dll 或 libjvm.so)。支持 JNI 的 Java 平台的任何实现都会这么做,或允许您指定 JVM 共享库;然而,完成这方面操作的细节可能会因具体 Java 平台/JVM 实现而有所不同。实际上,许多 JVM 实现根本不支持 JNI。

转载于:https://my.oschina.net/jerikc/blog/81867

用 JNI 进行 Java 编程(1)相关推荐

  1. jni调用java类_JNI之C++调用Java类 —— java.lang.String

    JNI之C++调用Java类 -- java.lang.String 为什么要用C++调用Java类?很难回答,写着文章只是觉得JNI很有意思.于是开始编写一段使用VC++在Windows系统里调用j ...

  2. java编程应该要的英语_java编程中常用英语单词

    JAVA 省略语与名词解释 -------------------------------- J2EETM----JavaTM 2PlatformEnterpriseEdition : J2EE(JA ...

  3. jni开发-java调用c函数,c调用java函数实现

    1.配置 下载ndk,cmake即可. 2.实现 MainActivity的实现 public class MainActivity extends AppCompatActivity {// Use ...

  4. 学java编程时遇到的错误汇总

    学java编程时遇到的错误汇总: 命令行篇: 1,用命令行编译程序后,运行程序时出现这样的错误提示 A JNI error has occurred, please check your instal ...

  5. jni 调用java接口_JNI 调用 JAVA 接口

    JNI 调用 JAVA 接口 介绍 JNI 是本地语言编程接口.它允许运行在JVM中的Java代码和用C.C++或汇编写的本地代码相互操作. 由于一些加密等情况的需要,需要在 so 层获取一些信息用于 ...

  6. 除了java还学什么_学好Java编程除了努力还需要具备什么?

    Java编程语言的热流席卷了全球,它的出现摆脱了C语言尾大不掉的困境,灵活.多变,塑造性强的特点不仅符合当下互联网的发展趋势,也得到一批批青年俊才的青睐,Java编程抛出的橄榄枝,也吸引了大量计算机专 ...

  7. 偏执却管用的 10 条 Java 编程技巧

    经过一段时间的编码(咦,我已经经历了将近20年的编程生涯,快乐的日子总是过得很快),我们开始感谢那些好习惯.因为,你知道- "任何可能出错的事情,最后都会出错." 这就是人们为什么 ...

  8. 学习Java编程培训的书籍有哪些

    学习java技术除了线上线下的培训学习,书籍的知识也是非常重要的,今天小编为大家整理的就是学习Java的一些书籍,Java书籍是程序员学习提升技能的重要学习渠道,通过书籍Java程序员可以学习当前流行 ...

  9. Java编程的逻辑 (39) - 剖析LinkedList

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  10. 某程序员吐槽:免费教妹子Java编程,妹子却不让自己找她闲聊!

    许多程序员教妹子编程.带妹子打游戏,都是醉翁之意不在酒,名为教学,实为追求,但有一个程序员小哥哥却比较悲催,他答应一个妹子当她师傅,教她Java编程,结果妹子却说,学习是学习,平时是平时,让小哥哥平时 ...

最新文章

  1. oracle和ibatis学习
  2. 明明白白学C#0.1.2 什么是编程语言
  3. js控制复选框选中显示不同表单_Vue之 表单
  4. c# 通过内存映射实现文件共享内存
  5. python apriori算法 sklearn_R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好?...
  6. acrobat xi pro 简体中文语言支持包_出图利器佳能PRO-541S绘图仪现货报价-佳能 PRO-541S_西安大幅面打印机行情...
  7. (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
  8. pdf编辑器哪个好 怎么添加pdf文件水印
  9. 【UAV】光流传感器原理分析及讲解
  10. docker容器的导入和导出
  11. domcontentloaded事件和laod事件区别
  12. win10系统多桌面切换方法及切换快捷键详细介绍
  13. Linux实战:awl-2.0工具模拟洪水攻击,建立大量的TCP连接
  14. 双十一来临,仓储物流快递安全保障解决方案
  15. 【18-业务开发-基础业务-商品模块-分类管理-前后端管理系统的启动-为分类管理表增加数据-Json插件的下载-返回具有层级目录、父子关系结构的数据】
  16. Tushare社区验证Carhart四因子模型
  17. Java String.contains()方法
  18. MATLAB用rbf拟合sinx,为什么径向基(RBF)网络拟合度很差呢?
  19. 【keras】keras教程(参考官方文档)
  20. 阿里云实践 - iTerm2登录服务器脚本(ssh)

热门文章

  1. Java的一个关于“星球”的枚举
  2. Filter过滤器处理JSP中文乱码
  3. java.util.NoSuchElementException: None.get的解决方法
  4. Apache实现一个IP配置多个站点
  5. java顺序表和树的实现
  6. UVALive 3135--Argus+自己定义优先队列的优先规则
  7. XCL-Charts图表库中柱形图的同源风格切换介绍
  8. 使用docker部署skywalking
  9. 树链剖分【p3038】[USACO11DEC]牧草种植Grass Planting
  10. [Linux]-Shell编程与规范