A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 段玉超 中级黑马   /  2012-2-29 11:42  /  1989 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

 Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。那么如何自己创建 native方法 实现与既有的C或者C++代码交互交互呢?求教

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

3 个回复

倒序浏览
段玉超 发表于 2012-2-29 14:02
这个文章我看过 我不明白的是 jdk中如何做的?

JDK里面实现调用本地资源,是底层资源的代码。这个我就爱莫能助了。
回复 使用道具 举报
本帖最后由 段玉超 于 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, 下载次数: 26)

class。的源代码

class。的源代码
回复 使用道具 举报
你说的就是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.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马