设为首页 加入收藏

TOP

25.2.5 通过JNI混合Java和C++(1)
2013-10-07 15:35:57 来源: 作者: 【 】 浏览:67
Tags:25.2.5 通过 JNI 混合 Java

25.2.5  通过JNI混合Java和C++(www.cppentry.com)(1)

Java Native Interface(Java原生接口,JNI)是Java语言的一部分,允许程序员访问非Java语言编写的功能。由于Java是一种跨平台的语言,这个接口的初衷是让Java程序和操作系统交互。JNI也允许程序员使用其他语言编写的库,如C++(www.cppentry.com)。如果Java程序员在应用程序中有性能关键的部分,或者需要使用遗留代码,那么访问C++(www.cppentry.com)库的能力对Java程序员来说是非常有用的。

JNI也可以用于在C++(www.cppentry.com)程序中执行Java代码,但是这种用法很少见。因为这是一本C++(www.cppentry.com)的书,所以我们不会介绍Java语言。本节面向应该已经知道Java,而且想在Java代码中结合C++(www.cppentry.com)代码的读者。

下面以一个Java程序开始Java的跨语言之旅。对于这个例子,最简单的Java程序就足够了:

  1. public class HelloCpp {  
  2. public static void main(String[] args)  
  3. {  
  4. System.out.println("Hello from Java!");  
  5. }  
  6. }  
  7.  
  8. 代码取自JNI\HelloCpp.java  

接下来,需要声明一个用其他语言编写的Java方法。要做到这一点,使用native关键字并且不给出实现:
  1. public class HelloCpp {  
  2. // This will be implemented in C++(www.cppentry.com).  
  3. public native void callCpp();  
  4. // Remainder omitted for brevity  
  5. }  
  6.  
  7. 代码取自JNI\HelloCpp.java  

C++(www.cppentry.com)代码最终会被编译成一个共享库被动态加载到Java程序。您需要在一个Java静态块中加载这个库,这样才能在Java程序开始执行时加载这个库。您可以任意命名这个库,例如Unix系统上的hellocpp.so或Windows系统上的hellocpp.dll。
  1. public class HelloCpp {  
  2. static {  
  3. System.loadLibrary("hellocpp");  
  4. }  
  5. // Remainder omitted for brevity  
  6. }  
  7.  
  8. 代码取自JNI\HelloCpp.java  

最后,在Java程序中实际调用这段C++(www.cppentry.com)代码。callCpp() Java方法是一个占位符,表示尚未编写的C++(www.cppentry.com)代码。由于callCpp()是HelloCpp类的一个方法,需要创建一个新的HelloCpp对象并且调用这个对象的callCpp()方法:
  1. public class HelloCpp {  
  2. static {  
  3. System.loadLibrary("hellocpp");  
  4. }  
  5. // This will be implemented in C++(www.cppentry.com).  
  6. public native void callCpp();  
  7. public static void main(String[] args)  
  8. {  
  9. System.out.println("Hello from Java!");  
  10. HelloCpp cppInterface = new HelloCpp();  
  11. cppInterface.callCpp();  
  12. }  
  13. }  

这是Java这边所有的内容。现在,只需像往常一样编译Java程序:

  1. javac HelloCpp.java 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇25.2.5 通过JNI混合Java和C++(2) 下一篇5.5.1 使用常量

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)