- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java从入门到精通学习笔记-Lesson3(native方法)
native方法
Sun公司提供的JNI是Java平台的一个功能强大的接口。这个JNI接口提供了Java与操作系统本地代码互相调用的功能。
Native方法是用户在Java中可以使用,但不能编写的方法。
JNI(Java Native Interface Java本地接口 ),它允许Java虚拟机(JVM)内部运行的Java代码能够与用其它编程语言(如C、C++、汇编语言)编写的应用程序和库进行互操作。
JNI最大的好处是它没有对底层Java虚拟机的实现施加任何限制,因此,Java虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地(Native)应用程序和库,就能够与所有支持JNI的Java虚拟机协同工作。
JNI可以理解为Java和本地应用程序之间的中介。
那么我们什么时候使用JNI呢?
如果我们想要访问操作系统的特有功能,想要同特殊的硬件设备沟通,我们可以使用JNI技术,利用其它语言去实现、去调用、去访问操作系统的特有功能。如果我们想重复使用过去编写的非java语言编写的代码,我们也可以使用JNI技术。如果我们想实现实时性很强的代码,可以采用其它语言去实现,如C和汇编语言,然后用JNI技术在Java中调用这种实现。
用本地方法编写一个Java程序(以HelloWorld.java为例):
写Java代码:
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary(hello);
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
编译Java代码:
javac HelloWorld.java
创建 . h 的文件
javah -jni HelloWorld
产生的HelloWorld.h文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include jni.h
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern C {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
写一个本地方法的实现
新建 HelloWorldImp.c
#include jni.h
#include HelloWorld.h
#include stdio.h
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) //HelloWorld.h中声明的函数原型
{
printf(Hello world!\n);
return;
}
第五步:创建一个共享的库
cl -IC:\Java\j2sdk1.5.0\include -IC:\Java\j2sdk1.5.0\include\win32 -LD HelloWorldImp.c -Fehello.dll
这里的cl是安装了Visual C++而提供的编译工具。标明为蓝色的那部分是JDK中的include 和win32文件夹所在的路径。
第六步:执行Java程序
java HelloWorld
注意到”hello.so”这个文件的后缀为”.so”这是Unix和Linux平台下的动态链接库文件的后缀名。在Windows平台下的动态链接库为”.dll”。
class Garbage
{
int index;
static int count;
Garbage()
{
count++;
System.out.println(object +count+ construct);
setID(count);
}
void setID(int id)
{
index=id;
}
您可能关注的文档
最近下载
- TBT3202-2020 铁路信号点灯单元.pdf VIP
- 生产安全事故调查笔录询问要点.doc VIP
- 安全生产百错图.pdf VIP
- 生产安全事故调查笔录询问要生产安全事故调查笔录询问要点生产安全事故调查笔录询问要点生产安全事故调查笔录询问要点.doc VIP
- DB14∕T 2143-2020 养老机构介护老年人护理风险防控规范.docx VIP
- 徐寿昌主编《有机化学》(第二版)-课后1-13章习题答案 .pdf VIP
- 体育赛事经济效益价值评估导则.docx VIP
- 探秘云南:地域差异下的并殖吸虫病原学解析.docx
- 学生发展指导手册(最新版).pdf VIP
- 生产安全事故调查笔录询问要点.docx VIP
原创力文档


文档评论(0)