黑马程序员技术交流社区

标题: 关于java中的native 方法 求教 [打印本页]

作者: 段玉超    时间: 2012-2-29 11:42
标题: 关于java中的native 方法 求教
 Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。那么如何自己创建 native方法 实现与既有的C或者C++代码交互交互呢?求教
作者: 王--明    时间: 2012-2-29 13:59
你说的就是JNI(Java Native Interface)技术了,本人也对此学艺不精,知道的就告诉你。这是我总结的实现C接口的步骤。希望有所帮助。
可以将native方法比作Java程序同C程序的接口,其实现步骤:
  1、在Java中声明native()方法,然后编译;
             编写带有native声明的方法的java类
             使用javac命令编译所编写的java类
  2、用javah产生一个.h文件;
  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
  4、将第三步的.cpp文件编译成动态链接库文件;
  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
JAVA本地方法适用的情况
  1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问
  2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的
  3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。
作者: 段玉超    时间: 2012-2-29 14:02
本帖最后由 段玉超 于 2012-2-29 14:05 编辑
王--明 发表于 2012-2-29 13:59
你说的就是JNI(Java Native Interface)技术了,本人也对此学艺不精,知道的就告诉你。这是我总结的实现C ...


这个文章我看过 我不明白的是 jdk中如何做的?特别是 为什么registerNatives() 也是 Native 的?

system.jpg (29.72 KB, 下载次数: 29)

System的源代码

System的源代码

Object.jpg (10.88 KB, 下载次数: 30)

Object的源代码

Object的源代码

Class.jpg (26.39 KB, 下载次数: 27)

class。的源代码

class。的源代码

作者: 王--明    时间: 2012-2-29 14:08
段玉超 发表于 2012-2-29 14:02
这个文章我看过 我不明白的是 jdk中如何做的?

JDK里面实现调用本地资源,是底层资源的代码。这个我就爱莫能助了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2