java中原生方法_Java中原生(native)函数的用法

1、原生(Native)函数的概念

在Java程序中,可以使用由其他编程语言实现的函数,这种函数,在Java中被称之为

原生(Native)函数。

2、在Java程序中使用原生函数的优缺点

1)优点

A、在Java程序中,可以复用已由其他语言实现的各种库。

可能已存在很多由其他语言编写的库,为了在Java程序中能够复用这些库,就需要用到原生函数。

B、增加了Java标准类库中不存在的功能

由于Java的可移植性,它不能利用与操作系统相关的特点,因此,当要访问特定的硬件设备或使用新的网络驱动器时,就不得不使用原生函数提供的功能。

2)缺点

A、任何包含原生函数的Java类均不能用于Applet程序。

这主要是出于安全性的考虑,因为Java的安全管理机制难以防范来自原生函数的恶意攻击。

B、使用原生函数将会使Java程序失去可移植性。

因为,你必须为运行该Java程序的各种平台编写不同的原生函数链接库。

3、原生函数的实现步骤

1)JNI接口

JNI接口是Java Native Interface的缩写,它已成为Java平台的一部分,它允许

在Java程序中调用由其他语言编写的函数。

JNI接口标准的设计目的有:

A、Java标准类库可能不支持应用程序中需要用到的与平台相关的功能,这部分功能就需要由JNI来实现。

B、对于已存在的由其他语言编写的库或者应用程序,在Java程序中,可以通过JNI来实现对这些已存在接口的调用。

C、可能需要用低级语言如汇编来实现一些对运行时间很严格的代码,在Java程序

中,就可以通过JNI接口来调用这些代码。

2)原生函数的实现步骤

A、编写带有native声明的Java类,如test.java

B、使用javac命令编译第一步中编写的java类,如javac test.java,假设生成的文件为test.class

C、使用javah命令来生成java类对应的存根头文件,如javah -jni test,假设生成的文件为test.h

D、使用C/C++来实现test.h中的native接口,如test.c

E、将test.c编译为动态链接库,如libtest.so。

这样,执行命令java test就可以运行了。

4、例子

在这里,我们编写一个最简单的打印hellow world的例子

1、编写一个带有native声明的Java类,如test.java

class TestJni

{

public native void myPrint();

static

{

System.loadLibrary("hellow");

//动态链接库的名字(linux下对应为libhellow.so)

}

public static void main(String args[])

{

TestJni test = new TestJni();

test.myPrint();

}

}

2、使用javac命令编译第一步中编写的java类

#javac test.java

这条命令将会编译该java程序,并生成相应的字节码文件:TestJni.class

3、使用javah命令来生成java类对应的存根头文件

#javah -jni TestJni

这条命令会根据指定的字节码文件生成相应的存根头文件TestJni.h,其内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include 

/* Header for class TestJni */

#ifndef _Included_TestJni

#define _Included_TestJni

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class:     TestJni

* Method:    myPrint

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_TestJni_myPrint

(JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

4、使用C/C++来实现TestJni.h中的native接口,比如将其相应的实现命名为TestJni.c:

#include 

#include "TestJni.h"

JNIEXPORT void JNICALL Java_TestJni_myPrint

(JNIEnv *, jobject)

{

printf("Hellow World!/n");

}

5、将TestJni.c编译为动态链接库

执行命令:

g++ -shared -o libhellow.so TestJni.c -I/usr/lib/jvm/java-6-sun-1.6.0.24/include

-I/usr/lib/jvm/java-6-sun-1.6.0.24/include/linux/

该命令运行后会生成名为libhellow.so的动态链接库。

注意:生成动态链接库时,头文件路径需要根据具体情况而修改

最后,就可以通过命令执行相应的java程序了(这里一般需要设置环境变量:LD_LIBRARY_PATH,即动态链接库libhellow.so 的路径):

#java TestJni

输出为:Hellow World!

这表明,一切OK。

//调用原生函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是节点光端机?总线型光端机有哪些优势?

节点式光端机又称总线型光端机,其准确的定义是采用单/双纤链路式组网形式的图像传输系统,也被称为链路式光端机。那么,节点式光端机具体是什么呢?总线型光端机又有哪些优势呢?接下来我们就跟随飞畅科技的小编一起来详细…

[渝粤教育] 西南科技大学 高频电子线路 在线考试复习资料2021版

高频电子线路——在线考试复习资料2021版 一、单选题 1.直接调频电路的优点是( )。 A.载频稳定度高 B.能够获得较大的线性频偏 答案:看左边查询 2.调频信号,则调频指数(最大相偏)是( )。 A.3 B.10 C.1000 D.1 答案:看左边查询 3.在混频过程中,频率等于或接近于中频的干…

【渝粤教育】电大中专学前儿童语言教育 (11)作业 题库

作业视频教务托管,壹叁路路贰陆陆壹〇肆〇 下面哪个选项不是学前儿童语言获得理论( )。 A.先天与后天相互作用论 B.遗传决定论 C.先天决定论 D.后天环境论 错误 正确答案:左边查询 学生答案:A 2.语言是( )和思维的工具。 A.动作 B.声音 C. 交…

mysql 备份html数据_MySQL自动化生成HTML页面(导出数据)极限SQL编程-sql文件怎么打开...

今日客户要求表内的数据依据某种分组生成HTML页面进行展示,一般处理这种需求直接上编程工具就好了,从数据库里读取数据,根据规则生成字符串,最后将字符串写出到文件。由于需求比较急,作为数据库编程系列文章&#xff0…

什么是数据光端机?数据光端机的作用有哪些?

数据光端机,电信非压缩光端机,就是将多个E1(一种中继线路的数据传输标准,通常速率为2.048Mbps,此标准为中国和欧洲采用)信号变成光信号并传输的设备。那么,什么是数据光端机?数据光端…

【渝粤教育】电大中专幼儿园组织与管理 (10)作业 题库

作业视频教务托管,壹叁路路贰陆陆壹〇肆〇 ( )是指一定组织中的管理者,通过计划、组织、领导与控制,协调他人的活动,带领人们既有效果,又有效率去实现组织目标的过程。 A.指导 B.协调 C.指挥 D.管理 错误 正确答案&…

spring创建web项目_使用Spring WS创建合同优先的Web服务

spring创建web项目1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 。 本示例将JAXB2用于(取消)编组。 为了开发服务,我将使用合同优先的方法,该方法首先定义服务合同,然后基于此合同实施…

【渝粤教育】电大中专新媒体营销实务 (15)作业 题库

1.新媒体在进行内容传播时,可以做到将文字、图片、视频等同时传播,呈现出()的特点。 A.移动化 B.多元化 C.便捷性 错误 正确答案:左边查询 学生答案:A 2.第四媒体发展到宽带互联网阶段成为(&…

mysql 返回多行数据_mysql – 如何连接多个表,包括查找表和返回行中的数据

我正在尝试显示一些简单的计算机游戏结果,并且可以轻松地在我的代码中逐行迭代结果.我想要它,以便每个游戏的所有相关数据都在每个记录中,所以我可以在一行输出所有数据,例如:> A队(得分45)对阵B队(得分55),比赛持续时间:5分钟> C队(得分60)对阵D队…

什么是网络光端机?网络光端机工作原理及功能介绍!

网络光端机,就是光信号传输的终端设备。由于目前技术的提高,光纤价格的降低使它在各个领域得到很好的应用。在远程光纤传输中,光缆对信号的传输影响很小,光纤传输系统的传输质量主要取决于光端机的质量,因为光端机负责…

使用@JsonIdentityInfo的Spring自定义序列化器

介绍 Spring中从JSON到JSON的序列化/反序列化已广泛用于基于Spring的现代应用程序中。 它基于杰克逊。 Jackson可以轻松地将任何POJO序列化为JSON,反之亦然。 这段代码写得很好。 我从未遇到任何问题。 当涉及到自定义序列化程序时,它将变得更加困难。 这…

【渝粤教育】电大中专电商运营实操 (15)作业 题库

1.目前菜鸟网络依赖大数据和云计算已实现了哪些功能( ) A.智能分单 B.自动化仓库 C.以上都正确 D.智能发货 E.物流云加速 错误 正确答案:左边查询 学生答案:E 2.目前( )的电子商务呈现出巨大的发展潜力。 A…

java notify视频_一个很好的小例子来演示java中的wait()和notify()方法

任何人都可以在java中为我提供一个很好的小例子演示wait()和notify()功能.我尝试使用下面的代码,但它没有显示我的预期.public class WaitDemo {int i 10;int display() {System.out.println("Lexmark");i;return i;}}public class ClassDemo1 extends Thread {priv…

【渝粤教育】电大中专电子商务网站建设与维护 (22)作业 题库

1.阿里巴巴的创始人是( ) A.丁磊 B.李彦宏 C.马化腾 D.马云 错误 正确答案:左边查询 学生答案:未作答 2.阿里巴巴目前的电子商务在哪个阶段( ) A.资金流 B.物流 C.商品流 D.信息流 错误 正确答案&#xff1…

以太网交换机的用途有哪些?

交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。交换机还具备了一些新的功能,如对VLAN(虚拟局域网)的支持、对链路汇聚的支持,甚至有的还具有防火墙的功能。接下来就由飞畅科技的小编带大家详细了解下交…

【渝粤教育】电大中专药理学基础 (3)作业 题库

1.关于巴比妥类药物药理作用的描述,错误的是()。 A.镇静 B.催眠 C.麻醉 D.抗惊厥 E.镇痛 错误 正确答案:左边查询 学生答案:C 2.地西泮适应证不包括()。 A.镇静催眠 B.抗癫痫和抗惊厥 C.肌紧张性…

交换机主要分为哪几类?

交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。 从广义上来看&…

java编程彩球滑梯作弊_课内资源 - 基于C++的学生成绩管理系统

1 系统分析1.1 学生成绩管理系统介绍班主任管家软件以学生信息、课程信息为基础,以品行表现成绩(辅导员、班主任、班级评议成绩)和业务课程成绩为评价依据,每学期评定一次奖学金,奖学金作为学生评定各种荣誉的主要依据,并将各种评…

【渝粤教育】电大中专财务管理与分析 (2)作业 题库

货币市场的主要功能是调节短期资金融通,下列不属于货币市场的特点的是( )。 A期限一般长于1年 B期限短 C交易目的是解决短期资金周转 D金融工具有较强的“货币性” 正确 正确答案:左边查询 学生答案:A 2下列关于个人独…

Hibernate事实:如何“断言” SQL语句计数

介绍 Hibernate简化了CRUD操作,尤其是在处理实体图时。 但是任何抽象都有其代价,而Hibernate也不例外。 我已经讨论了获取策略和了解Criteria SQL查询的重要性,但是您可以做更多的事情来统治JPA。 这篇文章是关于控制Hibernate代表您调用SQL语…