JNI允许运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,允许将Java虚拟机直接嵌入到本地的应用程序中。
环境搭建
1、安装jdk及配置环境配置
2、配置vc++ 6.0
编写java代码:
package org.nickfover.jni; public class Demo { public static int COUNT = 4; private String msg; private int[] counts; public Demo(){ this("缺省的构造方法"); } public Demo(String s){ this.msg = s; } public String getMessage(){ return msg; } public static String getHelloworld(){ return "Hello world!!"; } public String append(String str,int i){ return str + i; } public int[] getCounts(){ return counts; } public void setCounts(int[] counts) { this.counts = counts; } public void throwExcp()throws IllegalAccessException { throw new IllegalAccessException("execption occur."); } }
编译(注:用eclipse编写的出现编译错误,我把复制出来粘贴在文档文件中,可能是编码的问题)
之后用javap命令查看(javap是jdk自带的反编译软件):
E:\ECLIPSEWORKPALCE\JNI\src\org\nickfover\jni>javac Demo.java
扫描二维码关注公众号,回复:
589824 查看本文章
E:\ECLIPSEWORKPALCE\JNI\src\org\nickfover\jni>javap -s -p Demo
Warning: Binary file Demo contains org.nickfover.jni.Demo Compiled from "Demo.java" public class org.nickfover.jni.Demo { public static int COUNT; Signature: I //这个是指对象在内存中的类型表示,在java模块的类加载哪章有见解 private java.lang.String msg; Signature: Ljava/lang/String; private int[] counts; Signature: [I public org.nickfover.jni.Demo(); Signature: ()V //()V表示void,括弧内表示参数 public org.nickfover.jni.Demo(java.lang.String); Signature: (Ljava/lang/String;)V //L表示String public java.lang.String getMessage(); Signature: ()Ljava/lang/String; //()L表示返回String型 public static java.lang.String getHelloworld(); Signature: ()Ljava/lang/String; public java.lang.String append(java.lang.String, int); Signature: (Ljava/lang/String;I)Ljava/lang/String; public int[] getCounts(); Signature: ()[I public void setCounts(int[]); Signature: ([I)V public void throwExcp() throws java.lang.IllegalAccessException; Signature: ()V static {}; Signature: ()V }
参考:http://public0821.iteye.com/blog/423941