JAVA中native方法

转载 2007年09月15日 02:06:00

转自:http://karoii.bokee.com/5869823.html

  Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
  可以将native方法比作Java程序同C程序的接口,其实现步骤:
  1、在Java中声明native()方法,然后编译;
  2、用javah产生一个.h文件;
  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
  4、将第三步的.cpp文件编译成动态链接库文件;
  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问

2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的

3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。

首先写好JAVA文件
 /*
  * Created on 2005-12-19 Author shaoqi
  */
 package com.hode.hodeframework.modelupdate;

 public class CheckFile
 {
     public native void displayHelloWorld();

     static
     {
  System.loadLibrary("test");
     }

     public static void main(String[] args) {
        new CheckFile().displayHelloWorld();
     }
 }
然后根据写好的文件编译成CLASS文件
然后在classes或bin之类的class根目录下执行javah -jni com.hode.hodeframework.modelupdate.CheckFile,
 就会在根目录下得到一个com_hode_hodeframework_modelupdate_CheckFile.h的文件
然后根据头文件的内容编写com_hode_hodeframework_modelupdate_CheckFile.c文件
 #include "CheckFile.h"
 #include
 #include

 JNIEXPORT void JNICALL Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(JNIEnv *env, jobject obj)
 {
     printf("Hello world!/n");
     return;
 }
之后编译生成DLL文件如“test.dll”,名称与System.loadLibrary("test")中的名称一致
 vc的编译方法:cl -I%java_home%/include -I%java_home%/include/win32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll
最后在运行时加参数-Djava.library.path=[dll存放的路径]

 

java中native关键字的详解

java中的native关键字详解 这几天看java的源代码时多次见到方法前有个native关键字,而且凡是有这个关键字修饰的方法都没有方法体,只是一个方法的声明。很是疑惑,于是上网查了一下,现...
  • u013531824
  • u013531824
  • 2014年03月11日 14:17
  • 1144

java中native的用法

Java开发中会碰到声明为 native的方法,如:public native int hashCode(); 这是一个native方法。为什么存在native方法呢?Java不是完美的,Java的不...
  • zmx729618
  • zmx729618
  • 2016年03月02日 14:58
  • 2533

如何查找native方法

在看framework层代码时,经常会看到native方法,这是往往需要查看所对应的C++方法在哪个文件,对应哪个方法?下面从一个实例出发带大家如何查看java层方法所对应的native方法位置。实例...
  • hp910315
  • hp910315
  • 2016年06月22日 12:24
  • 2339

Java中native方法学习

  • 2011年06月01日 08:53
  • 2KB
  • 下载

Mac下Java的native方法以及JNI调用C语言

1.native方法最近在读JDK NIO的源代码的时候发现了很多的native方法,这些方法都只给出了native修饰的定义,并没有给出实现体,并且也没有实现体,形式上和接口很类似。但是这些其实是特...
  • u010853261
  • u010853261
  • 2016年12月05日 21:42
  • 2013

JAVA中native方法调用C语言实现学习

在java虚拟机规范的内存管理划分中,对于虚拟机内存空间划分中专门划了一块内存叫做“本地方法栈(Native Method Stack)”。本地方法栈是为了java专门用来调用native方法而划分出...
  • lisehouniao
  • lisehouniao
  • 2016年06月20日 21:43
  • 1566

java native方法及JNI实例

1.参考文献: http://blog.csdn.net/youjianbo_han_87/article/details/2586375 http://blog.csdn.net/yan...
  • enen199202
  • enen199202
  • 2016年04月08日 14:27
  • 271

java中的native方法

在java中native是关键字。它一般在本地声明,异地用C和C++来实现。它的声明有几点要注意:1)native与访问控制符前后的关系不受限制。2)必须在返回类型之前。3)它一般为非抽象类方法。4)...
  • x_panda
  • x_panda
  • 2013年12月04日 16:16
  • 1218

java中的native方法

转载地址:http://www.cnblogs.com/langtianya/p/3459647.html 一. 什么是Native Method    简单地讲,一个Native Method就...
  • u012000209
  • u012000209
  • 2017年08月09日 21:56
  • 117

java基础入门补充(001) native方法

java基础入门补充(001) native方法原文链接:Java的native方法今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解。一. 什...
  • sinat_23863357
  • sinat_23863357
  • 2017年07月27日 07:45
  • 56
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA中native方法
举报原因:
原因补充:

(最多只允许输入30个字)