什么是Java本地接口介绍
尽管可以完全用Java编写应用程序,但是有时单独用Java不能满足应用程序的需要,程序员使用JNI来编写Java本地方法,可以处理那些不能完全用Java编写应用程序的情况。
以下示例说明了何时需要使用Java本地方法:
l 标准Java类库不支持与平台相关的应用程序所需的功能。
l 已经拥有了一个用另一种语言编写的库,而又希望通过JNI使Java代码能够访问该库。
l 想用低级语言(如汇编语言)实现一小段时限代码。
通过用JNI编程,可以将本地方法用于:
l 创建检查及更新Java对象(包括数组和字符串)。
l 调用Java方法。
l 插捉和抛出异常。
l 加载类和获得类信息。
l 执行运行时类型检查。
也可以与调用API一起使用,以允许任意本地应用程序嵌入到Java虚拟机中,这样使用程序员能够轻易地让已有应用程序支持Java,而不必与虚拟机源代码相链接。
Java本地接口简介
Java本地接口(JNI)是一个编程框架使得运行在Java虚拟机上的Java程序调用或者被调用特定于本机硬件与操作系统的用其它语言(C、C++或汇编语言等)编写的程序。
Java本地接口功用
JNI允许用本地代码来解决纯粹用Java编程不能解决的平台相关的特性。也用于改造已存在的其它语言写的应用程序,供Java程序访问。许多使用了JNI的标准库提供了文件I/O与其它功能。标准库中性能敏感或平台敏感的API实现允许所有Java应用程序安全且平台独立地访问这些功能。
JNI框架使得本地方法可以访问Java对象,就如同Java程序访问这些本地对象。本地方法可以创建Java对象,然后检查、使用这些对象执行任务。本地方法也可以检查并使用由Java程序创建的对象。
Java开发人员称JNI为逃生门(\"escape hatch\"),因为JINI允许增加标准Java API不能提供的功能。也可以用于时间关键的计算或者如解复杂数学方程,因为本地方法的运算比JVM更快。也可以在安卓上重用已存在的C/C++编写的库。
Java本地接口定义
与其他方法相似,你必须声明要用的所有本地方法,并且必须将它们定义在一个类中。
你可将你的本地
HelloWorld
方法定义为如下形式:
publicnativevoidnativeHelloWorld();
这与你所写的其他
publicvoid
方法比较有两个变化:
*
关键字
native
被用作方法修饰符。
*
方法的主体部分(实际实现部分)在这里没有定义,而是代之以一个分号(;)。
你必须把本地方法的声明放到类的定义中。含有这个本地方法的类还包含一个静态代码块,它负责装载带有该方法实现的动态库。这里是为简单的
Java
运行环境在类被装载时执行定义的
static
代码块。
在上例中,
当类
NativeHello
被装载时,
库
hello1
被装入
应用