Java本地接口(JNI)全方位指南

需积分: 10 28 下载量 56 浏览量 更新于2024-07-31 1 收藏 585KB DOC 举报
"JNI完全手册.doc - 一份详细的JNI开发教程,涵盖了JNI的介绍、接口函数详解等内容,适合想要学习和使用JNI进行跨语言交互的开发者。" JNI(Java Native Interface)是Java平台中用于实现Java代码与本地(非Java)代码交互的一种接口。它允许Java应用程序调用用其他编程语言(如C、C++或汇编)编写的函数,同时也允许这些本地代码调用Java的方法。这种互操作性使得Java能够充分利用各种平台的特性,解决Java标准库无法覆盖的问题,如硬件访问、性能优化等。 JNI的重要特点是它的平台无关性。由于不依赖特定的Java虚拟机实现,开发者只需要编写一次本地代码,就能在任何支持JNI的Java虚拟机上运行。这减轻了开发者针对不同平台维护多个版本代码的负担。 JNI的核心功能包括: 1. **Java本地方法**:当Java应用需要执行特定平台的功能或者调用已有的本地库时,可以通过JNI定义本地方法,这些方法由非Java语言实现。 2. **对象和数组操作**:JNI提供了一系列接口,允许本地代码创建、检查和修改Java对象,包括数组和字符串。 3. **方法调用**:本地方法可以调用Java类中的方法,反之亦然。 4. **异常处理**:支持捕获和抛出Java异常,确保了Java异常处理机制在本地代码中的正常工作。 5. **类加载和信息获取**:JNI允许本地代码加载新的Java类,获取类的信息,包括字段和方法等。 6. **运行时类型检查**:在运行时进行类型验证,确保数据类型的正确性。 7. **与调用API结合**:通过JNI,本地应用程序可以嵌入到Java虚拟机中,实现与Java环境的无缝集成。 在历史背景下,JNI的出现是为了统一各厂商虚拟机提供的不同本地方法接口。早期的Java SDK(如JDK1.0)提供的本地方法接口存在平台依赖问题,而JNI则解决了这个问题,提供了标准的、可移植的本地接口,使得开发者可以编写一次本地代码,到处运行。 通过JNI,开发者可以利用Java的高级特性(如垃圾收集、多线程)以及本地代码的高效执行能力,实现更复杂的应用场景,例如游戏开发中的图形渲染、设备驱动的控制等。同时,JNI也是许多Java框架和库与操作系统底层交互的基础,如Android系统的许多系统服务就是通过JNI与本地库进行通信的。 在实际开发中,使用JNI需要遵循一定的规则和最佳实践,例如尽量减少Java和本地代码之间的数据交换,因为这可能导致性能下降;另外,由于JNI涉及到跨语言交互,调试可能会比较复杂,所以良好的文档和测试是必不可少的。
2018-04-06 上传
Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 Chap 3:javah命令帮助信息... 16 Chap 4:用javah产生一个.h文件... 17 Chap5:jni教程(very very good) 19 Chap6: JNI传递返回值... 26 15.2.2.3 传递字符串... 28 15.2.2.4 传递整型数组... 29 15.2.2.5 传递字符串数组... 30 15.2.2.6 传递对象数组... 31 Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载)... 55 1、实例一:在jni中调用标准c中自带的函数printf(): 57 2、实例二、调用c 语言用户定义的函数... 58 3、实例三、在jni函数中访问java类中的对象实例域... 58 4、实例四:在jni函数中访问类的静态实例域... 60 5、实例五:在jni函数中调用java对象的方法... 60 6、实例六:在jni函数中调用java类的静态方法... 61 7、实例七:jni函数中传递基本数据类型参数... 62 8、实例八:在jni函数中传递对象类型参数... 62 9、实例九:在jni函数中处理字符串... 63 10、实例十:在jni函数中处理数组... 64 11、实例十一:在jni中的返回值问题... 65 12、实例十二:在jni中创建java类对象:... 66 Chap10:在 Windows 中实现 Java 本地方法... 66 1.Java 调用 C. 67 2.调试... 76 3.其他信息... 79 Chap11:如何在C/C++中调用Java. 80 1.环境搭建... 81 2.初始化虚拟机... 83 3.访问类方法... 85 4访问类属性... 87 5.访问构造函数... 88 6.数组处理... 89 7.中文处理... 89 8.异常... 91 9.线程和同步访问... 91 10.时间... 92 Chap12:基本JNI调用技术(c/c++与java互调) 93 Chap13:JNI的c代码中,另外一个线程获取 JNIEnv. 96 chap 14:当JNI遇到多线程--java对象如何被C++中的多个线程访问?. 97 chap 15:JNI在多线程中的应用... 101 chap 16:JNI限制(多线程)... 105 chap 17:使用 Java Native Interface 的最佳实践... 106 1.性能缺陷... 107 2.正确性缺陷... 117 3.避免常见缺陷... 121 4.结束语... 128 Chap18:JNI设计实践之路... 129 一、 前言... 129 二、 JNI基础知识简介... 130 三、 Java程序调用非Java程序... 131 四、 C/C++访问Java成员变量和成员方法... 138 五、 异常处理... 140 六、 MFC程序中嵌入Java虚拟机... 142 Chap19:JNI编程系列之基础篇... 148 System.loadLibrary("HelloWorld"); 149 JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject); 150 Chap20:JNI编程系列之中级篇(上)... 151 1. Java基本类型的传递... 151 2. String参数的传递... 151 3. 数组类型的传递... 153 4. 二维数组和String数组... 154 Chap21:JNI编程系列之高级篇... 155 1. 在一般的Java类中定义native方法... 156 2. 访问Java类的域和方法... 156 3. 在native方法中使用用户定义的类... 157 4. 异常处理... 158