`

Java中Native关键字的作用

    博客分类:
  • J2SE
阅读更多

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中被访问了。


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

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

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


首先写好JAVA文件

 /**//*
  * Created on 2008-5-19 Author zdw
  
*/

 
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存放的路径]


々上善若水々 2008-05-26 09:18 发表评论
分享到:
评论

相关推荐

    详解Java中native关键字

    主要为大家详细介绍了Java中native关键字,什么是Native Method

    java的native关键字学习

    这是本人学习java native过程中的一些程序,学习native的朋友们可以下载一下。

    全面了解Java中Native关键字的作用

    下面小编就为大家带来一篇全面了解Java中Native关键字的作用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JAVA中的关键字和保留字

    native - 10 - new - 11 - null - 11 - package - 11 - private - 11 - protected - 12 - public - 12 - return - 13 - short - 13 - static - 13 - super - 14 - switch - 14 - synchronized - 15 - this - 16 - ...

    尚硅谷-拓展:native关键字.pdf

    ·课程中,Eclipse和IDEA这两种企业一线开发环境都使用到了 3.技术讲解更深入、更全面: ·课程共30天,715个知识视频小节,涉及主流Java使用的方方面面,全而不冗余 ·全程内容涵盖数据结构、设计模式、JVM内存...

    使用Java Native Interface调用本地C++代码.txt

    首先,我们需要在Java类中声明一个native方法,并使用`native`关键字来修饰它。然后,我们需要使用`System.loadLibrary()`方法来加载本地库,这个库包含了本地方法的实现。最后,我们可以像调用普通的Java方法一样...

    java关键字.docx

    native:本地方法,用于定义一个使用本地语言实现的方法。 new:新建,用于创建一个新的对象。 null:空,用于表示一个空对象引用。 package:包,用于定义一个包。 private:私有,用于定义一个私有成员或方法。 ...

    Java虚拟机.docx

    3.本地方法栈:当Java去调用一些本地的C/C++方法时使用的栈,native关键字修饰的方法是间接去调用本地的底层方法。 4.堆:通过new关键字,创建对象都会使用到堆内存,堆属于线程共享的,需要考虑线程安全的问题,有...

    java面试题

    1、下面哪些是java语言中的关键字?( ) A. sizeof B. abstract C. NULL D. Native E. synchronized F.List 2、下面语句哪些是正确的?( ) A. char c='abc'; B. long l=oxfff; C. float f=0.23; D. double d=0.7E...

    jdk完整源代码(jvm,native,sun)

    jdk完整源代码 sun包源 jvm源 n ative关键字修饰的java方法源 rt.jar nio misc 等等 几乎我们能想到的都包含进来了 sun包不太好找jdk\jdk\src\share\classes路径贴出来 供学习使用

    Linux 中awk 提取包含某个关键字的段落

    前提 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 本文将使用命令awk将具有某个关键字的段落提取出来。... at java.lang.Object.wait(Native Method) - waiting on <0x00000000d670

    Java面试宝典2017.zip

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    JAVA面试题最全集

    9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中...

    java面试宝典

    42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以...

    java 面试题 总结

    内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...

    Java面试宝典-经典

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java面试宝典2010版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    java面试题大全(2012版)

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    java 面试常问的问题 如何回答

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

Global site tag (gtag.js) - Google Analytics