- 浏览: 32452 次
- 性别:
- 来自: 湖南
文章分类
最新评论
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文件:
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存放的路径]
发表评论
-
HttpClient容易忽视的细节——连接关闭
2012-03-02 09:15 581HttpClient client = new HttpCli ... -
HTTPClient的多线程编程
2012-03-02 09:09 1446Axis2的连接主要采用了HttpClient进行与服务器的服 ... -
HttpClient超时区别
2012-03-02 09:07 1042HttpClient 4 设置超时 httpclient 超时 ... -
HttpClient Theading
2012-03-01 10:49 638有技术兴趣的 请加28830308群. 这篇文章概括了怎样在 ... -
HttpClient使用
2012-03-01 10:43 671有技术兴趣的 请加28830308群. HttpClien ... -
线程请求执行,一个多线程程执行HTTP请求的例子。
2012-03-01 10:40 1719package cn.lake.util; import ... -
httpclient 4 下载 文件
2012-03-01 10:38 888import java.io.File; import ja ... -
使用了httpclient实现的上传商品的demo
2012-03-01 10:36 1117package com.taobao.top.sample.u ... -
socket简介
2012-02-07 10:58 652第一步 充分理解Socket ... -
转载socket
2012-02-07 10:57 530对TCP/IP、UDP、Socket编程这些词你不会很陌生吧? ... -
Java的synchronized关键字:同步机制总结
2012-02-07 10:54 535不久前用到了同步,现在回过头来对JAVA中的同步做个总结,以对 ... -
JAVA RMI
2012-02-07 10:53 545Java RMI 指的是远程方法调用 (Remote Meth ... -
JXL生成复杂的EXCEL
2011-12-26 13:52 1343public String ExcelTaskRepo ... -
如何快速的为现有数据库建立数据字典?
2011-12-20 13:55 955大部分项目在验收时都需要向客户提供一份详细的数据字典,而编写数 ... -
在java中获取客户端真实的IP地址
2011-12-20 13:55 522public static String getRemoteA ... -
用JavaMail的API发送邮件
2011-12-20 13:55 5001、MimeMessage的包装类 public c ... -
在项目中整合FreeMarker框架
2011-12-16 15:40 558FreeMarker是一个用Java编写的模板引擎,既可以 ... -
Commons FTP范例
2011-12-16 15:33 480public class FtpUtil { privat ... -
Java实现的图片生成器
2011-12-16 15:32 486一、本图片生成器具有以下功能特性: 1、可以设置图 ... -
jacob学习总结
2011-12-16 15:27 402JACOB 就是 JAVA-COM Bridge的缩写,提供自 ...
相关推荐
主要为大家详细介绍了Java中native关键字,什么是Native Method
这是本人学习java native过程中的一些程序,学习native的朋友们可以下载一下。
下面小编就为大家带来一篇全面了解Java中Native关键字的作用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
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 - ...
·课程中,Eclipse和IDEA这两种企业一线开发环境都使用到了 3.技术讲解更深入、更全面: ·课程共30天,715个知识视频小节,涉及主流Java使用的方方面面,全而不冗余 ·全程内容涵盖数据结构、设计模式、JVM内存...
首先,我们需要在Java类中声明一个native方法,并使用`native`关键字来修饰它。然后,我们需要使用`System.loadLibrary()`方法来加载本地库,这个库包含了本地方法的实现。最后,我们可以像调用普通的Java方法一样...
native:本地方法,用于定义一个使用本地语言实现的方法。 new:新建,用于创建一个新的对象。 null:空,用于表示一个空对象引用。 package:包,用于定义一个包。 private:私有,用于定义一个私有成员或方法。 ...
3.本地方法栈:当Java去调用一些本地的C/C++方法时使用的栈,native关键字修饰的方法是间接去调用本地的底层方法。 4.堆:通过new关键字,创建对象都会使用到堆内存,堆属于线程共享的,需要考虑线程安全的问题,有...
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完整源代码 sun包源 jvm源 n ative关键字修饰的java方法源 rt.jar nio misc 等等 几乎我们能想到的都包含进来了 sun包不太好找jdk\jdk\src\share\classes路径贴出来 供学习使用
前提 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 本文将使用命令awk将具有某个关键字的段落提取出来。... at java.lang.Object.wait(Native Method) - waiting on <0x00000000d670
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...
9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中...
42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以...
内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...