Native 关键字
Native关键字
什么是native method
简单的说,一个native Method就是一个java调用非java代码的接口,一个Native Method的实现是由非java代码实现。
标识符native可以与其他标识符一起出现 除了abstract。
一个Native Method方法可以返回任何java类型,包括非基本类型,也可以进行异常控制。
为什么要使用Native Method方法
- 与java环境外进行交互:java需要与底层系统如操作系统或硬件交换信息的时候。Native Method方法提供一个接口,我们无需去了解应用之外的繁琐细节。
- 与操作系统交互:JVM支持着java语言本身和运行时的库,jvm经常依赖于底层系统的支持,通过使用Native Method,我们可以用java代码实现jre和底层系统之间的交互,JVM的部分甚至是用C写的。在使用java语言本身没有封装的操作系统的特性时,也需要使用Native Method方法。
JVM怎么使Native Method跑起来
当一个类第一次被使用时,这个类的字节码会被加载到内存,并且会被回载一次,在这个被回载的入口维持着一个该类所有方法描述符的list,这些方法描述符包含信息:方法代码被存的地方,参数类型,方法修饰符等等。
如果一个方法描述符内有一个native,这个描述符块将有一个指向该方法的指针,这些实现在DLL文件内,他们会被操作系统加载到,java程序的地址空间内。当一个带有native方法的类被加载时,其相关DLL并没有被加载,因此指向方法实现的指针并不会被设置,当本地方法被调用之前这些DLL才会被加载,这是通过java.system.loadLibary实现的。
将native方法比作Java程序同C程序的接口,其实现步骤:
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问。
本文来自博客园,作者:依然学不会,转载请注明原文链接:https://www.cnblogs.com/yrxbh/p/15626946.html

浙公网安备 33010602011771号