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
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