jdk 1.8
Java h 生成实现本地方法所需的 C 头文件和源文件。C 程序用生成的头文件和源文件在本地源代码中引用某一对象的实例变量。.h 文件含有一个 struct 定义,该定义的布局与相应类的布局平行。该 struct 中的域对应于类中的实例变量。
javah命令参数详解

-o 输出文件
将命令行中列出的所有类的头文件或源文件串接到输出文件中。-o 或 -d 两个选项只能选择一个。
-d 目录
设置 javah 保存头文件或 stub 文件的目录。-d 或 -o 两个选项只能选择一个。
-verbose
指明长格式输出,并使 javah 将所生成文件的有关状态的信息输出到标准输出设备中。
-help
输出 javah 用法的帮助信息。
-version
输出 javah 的版本信息。
– JNI
使 javah 创建一输出文件,该文件包含 jni 风格的本地方法函数原型。这是缺省输出,所以 -jni 的使用是可选的。
– CLASSPATH 路径
指定 javah 用来查询类的路径。如果设置了该选项,它将覆盖缺省值或 CLASSPATH 环境变量。目录用 分号 分隔(如果失败,可用 冒号 试试,尤其是最新 Linux java版本)。因此,路径的一般格式是:
.;<您的路径>
例如:
.;C:usersdacclasses;C:toolsjavaclasses
-bootclasspath 路径
指定加载 自举 类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jre librt.jar 和 jrelibi18n.jar 中。
-old
指定应当生成旧 JDK1.0 风格的头文件。
-force
指定始终写输出文件。
使用 java h 命令生成 C语言 函数名
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
新建一个含有native方法的java类:JavaHDemo.java
package com.being;
public class JavaHDemo {
static {
System.loadLibrary("JavaHDemo");
}
public static void main(String[] args) {
sayHello("being");
}
public static native void sayHello(String name);
}
执行 javac JavaHDemo.java命令 在本目录会生成JavaHDemo. class文件

src所在目录执行如下命令:
执行javah -jni com.being.JavaHDemo会生成jni头文件:

打开文件com_being_JavaHDemo.h
/* DO NOT EDIT THIS FILE - it is machine generated */# include <jni.h>
/* Header for class com_being_JavaHDemo */
#ifndef _Included_com_being_JavaHDemo
# define _Included_com_being_JavaHDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_being_JavaHDemo
* Method: sayHello
* Signature: (Ljava/lang/String;)V
*/JNIEXPORT void JNICALL Java_com_being_JavaHDemo_sayHello
(JNIEnv *, jclass, jstring);
#ifdef __cplusplus
}
#endif
#endif