JNI 概述

Java本地接口(JNI)是JDK Java本地编程接口的一部分。通过使用JNI编程,可以保证你的代码在所有平台上完全可移植。

JNI允许在Java虚拟机中运行的Java代码使用其它语言写的库和应用,这些引用API可以让你的Java虚拟机嵌入到本地应用去。

在一些情况下,应用程序不能完全通过Java语言编写的时候,程序员可以使用JNI来编写本地方法。例如,你可能在下列情况下需要使用本地方法了JNI:

·   Java标准类库可能不支持一些你的程序所需要的平台相关的特性。

·   你可能已经拥有了一个使用其它编程语言编写的程序库或者应用,而且你也想在Java应用中使用它。

·   你可能需要执行一小部分对实时性要求极高的低级程序语言,例如汇编,可以让你的Java应用调用函数。

你可以通过JNI框架编程使用本地方法做很多操作。本地方法可能是遗留下来的最好的应用,或者问题最好是使用Java以外的编程环境才能得到最好的解决。

JNI框架可以让你使用让你的本地方法使用Java对象,这就和Java代码使用这些对象是一样的。一个本地方法可以创建Java对象,包括数组合字符串,然后可以检查和使用这些对象来执行它的任务。本地方法同样可以检查和使用Java代码创建的对象。一个本地方法甚至能够更新Java对象,这些对象是它创建的或者是它过去创建的,这些更新过的对象在Java中也是可见的。因此,本地语言和Java语言两者都能够创建,更新和访问Java对象,它们能够共享这些对象。

本地方法同样能够很轻松的调用Java方法。常常你已经开发好了一个Java方法的库。

如果已经存在的Java方法已经包含了一些可以执行方法,那么在你的本地方法中就不需要“重新构建”。

JNI通过你的本地方法来使用Java编程语言的优势。特别的是,你可以捕获和抛出本地方法中的异常,并且在Java应用中处理这些异常。本地方法同样可以得到Java类的信息。通过调用特殊的JNI方法,本地方法能够加载Java类并且得到类信息。最终,本地方法可以使用JNI来进行运行期类型检查。

例如,下面的图片C程序是怎么通过JNI来连接Java库德,调用Java方法,使用Java类,等。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

下一个图片说明了从Java应用程序中调用本地语言函数。这个图显示了通过Java程序使用JNI的多种可能性,包括调用C例行程序,使用C++类,调用汇编例程,还有Z等。

可以很简单的把JNI看作是Java和本地应用程序的粘合剂。下面的图显示了JNI怎样把C程序和Java程序连绑定在一起。

转载于:https://www.cnblogs.com/BlueMagic/archive/2005/05/01/148574.html

JNI 概述 (翻译)相关推荐

  1. 计算机中scsi是什么翻译中文,SCSI命令概述(翻译)

    <SCSI命令概述(翻译)>由会员分享,可在线阅读,更多相关<SCSI命令概述(翻译)(34页珍藏版)>请在人人文库网上搜索. 1.UNH 互操作性实验室,SCSI 命令概述, ...

  2. ASP.NET AJAX文档-ASP.NET AJAX 概述[翻译](1)

    本文翻译自官方文档,小弟是第一次翻译,若有不妥之处,请大家指出. ASP.NET AJAX 概述 介绍 微软的ASP.NET AJAX能让你快速的创建web页面,这些页面包括一个能快速响应的富用户体验 ...

  3. C++函数概述 | 翻译密码

    C++函数 函数很重要,在开发常见的做法是把一个大的程序划为为若干个程序模块,每个模块实现一部分功能,这样做不仅可以多人来完成,也可以在单个模块中找bug. 和C语言一样,C++也是只能有一个main ...

  4. ARMV8/ARMV9指令集概述(翻译)

    快速链接: .

  5. 02_tensorflow2环境安装、CUDA 10.1 和CUDnn 7.6.5 版本安装、https://tensorflow.google.cn/overview中概述翻译

    1.新手入门 1.1 安装tensorflow环境 1.安装了Anaconda,进入Anaconda Prompt: 关于安装Anaconda的博文参考:python安装.anaconda安装.pyc ...

  6. Qt Linguist翻译过程概述

    Qt Linguist翻译过程概述 翻译过程概述 翻译过程概述 必须在应用程序中翻译的大多数文本由单个单词或简短短语组成.这些通常显示为窗口标题,菜单项,工具提示以及按钮,复选框和单选按钮的标签. 开 ...

  7. 关于JNI的几个问题

    本文来说下JNI的几个问题 文章目录 JNI 概述 Java 代码和JNI代码通信 Java代码通过JNI接口 调用 C/C++方法 静态JNI方法和实例JNI方法的区别 java和JNI类型对照表 ...

  8. Android JNI原理分析

    引言:分析Android源码6.0的过程,一定离不开Java与C/C++代码直接的来回跳转,那么就很有必要掌握JNI,这是链接Java层和Native层的桥梁,本文涉及相关源码: frameworks ...

  9. 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器

    1.概述 翻译:http://janino-compiler.github.io/janino/#janino-as-a%20compiler Janino 是一个超小.超快的 Java 编译器. J ...

  10. 【Elasticsearch】所有可用 Qbox 插件的概述:第二部分

    1.概述 翻译:https://qbox.io/blog/overview-of-all-available-qbox-plugins-part-ii 在文章的第二部分,我们将重点介绍提供各种第三方集 ...

最新文章

  1. 使用lisp函数控制cursor
  2. 中报亮眼,阅文的增长“飞轮”是如何练成的?
  3. mqtt js 中乱码_mqtt之上RRPC同步调用实战
  4. VTK:可视化之AssignCellColorsFromLUT
  5. matlab评价模型和预测模型
  6. location.href和window.open的几种用法和区别
  7. S3C2440 由ADS移植到 RealView MDK kile4
  8. 虚幻4游戏开发_4_导入fbx和编辑
  9. linux基础-- 桌面系统如何切换命令窗口
  10. Android 10 原生支持 5G!
  11. .NET Core基于Furion框架实现依赖注入
  12. 我对袁萌老先生的一些偏见
  13. python学习之 re库 正则表达式
  14. 论文笔记:《Object-Aware Guidance for Autonomous Scene Reconstruction》
  15. 2021laysns内核仿大婶娱乐网模板整站源码 非常漂亮 可做娱乐资源网 整站打包源码
  16. PySpark基础 —— SparkSQL
  17. Dubbo的四种负载均衡机制
  18. 2020年12月CFA一二三级考试重要时间点公布!
  19. Android.mk使用
  20. 洛谷递推与递归题单之南蛮图腾

热门文章

  1. Java操作MongoDB(聚合函数)向Mongo插入及查询数据
  2. SQL server 2005 数据库只能用计算机名连接不能用IP地址
  3. xtrabackup mysql 5.1_编译支持mysql-5.1.73版本的xtrabackup
  4. 赣州计算机教师招聘,江西省赣州市章贡区2019年招聘教师人员岗位表
  5. stn专线和otn有什么区别_专线网络和家庭宽带有什么区别?
  6. (day 46 - 小根堆 || 动态规划 ) 剑指 Offer 49. 丑数
  7. Java的继承和python的继承_Java ,python面向对象的继承及其区别
  8. python掷骰子_掷骰子童芯派 python硬件编程(上传模式)
  9. java clone方法_Java基础:Cloneable接口和Object的clone()方法
  10. php mysql过滤特殊字符_php特殊字符过滤,html标签处理