Java开发技术第十章 本地方法.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java开发技术第十章 本地方法

第十章 本地方法 用 Java 编程语言调用一个 C 函数 用纯 Java 开发应用是理想的,但从现实上讲,有时还需用其他语言开发应用程序的一 部分。 10.1 简介 每一种高级语言在实际应用中总会表现出不足的地方,所以需要借助其他高级语言的配 合。在开发 Java 的系统中,我们往往也会希望 Java 和其它语言可互相通信和调用,使它 们集成在一个应用系统中。为了满足这个要求,Sun 公司开发了 JNI(Java native Interface) 技术,JNI 是双向的,一方面它可使运行在 JVM 中的Java 代码调用 native 库函数或者其它 程序;另一方面利用 Invocation API 将 Java 虚拟机嵌入 native 应用中。如图 10-1 所示。 C 端 应用程序 Java 端 异常 函数 JNI 类 库 虚拟机 图10- 1 JNI 的作用 本章用于编写本地代码的语言是 C/C++,如果能访问一个捆绑 Java 和 FORTRAN 这 两种编程语言的包,也可以使用 FORTRAN 编译器编译过的代码。 我们这里之所以使用 C 语言来描述本章所讲的本地方法,因为 C 语言可能是最常用于 本地方法的语言。我们将看到如何在数据类型、功能部件名称、函数访问上使 Java 与 C 之 间保持一致(这种对应通常叫做 C 捆绑)。 10.2 用JAVA 编程语言调用一个C 函数 我们以大家偏爱的 printf 函数为例,来演示如何利用 JNI 在 Java 应用中使用 native 方 法。该 Java 程序调用 C 语言的函数来打印 Hello World!。Java 编程语言用关键字修饰本 地方法,显然,需要将 printf 函数封装到类内,因此,可以编写成如下形式的代码: public class Printf { public native String printf (String s); } 编译这个类后,在一个程序中使用它时,虚拟机将告诉你它不知道如何找到 printf 函数 ——会显示一个“UnsatisfiedLinkError”错误。因此,解决的办法是给运行时间类环境提供足 够的信息,从而它能够连接这个类。在 JDK 上,需采用如下三个步骤: 318 1)为函数产生一个代码存根,它在 Java 平台调用与实际的 C 函数之间进行翻译。它从 虚拟机栈中取出参数信息并把它传给已编译的 C 函数来完成翻译过程。 2)创建一个特殊的共享库,从共享库中输出这个存根代码。 3)使用一个名为 System.loadlibrary()的特殊方法,通知Java 运行时间环境从步骤 2 开 始装载这个库。 就像我们在前面提到的一样,首先需要在一个类中声明本地方法,native 关键字会向编 译器发出警告:本地方法将在外部定义。当然,在 Java 编程语言中本地方法不包含任何代 码,并且这种方法的标题之后会紧跟着一个终止分号,这意味着本地方法声明与抽象方式说 明极其相似。 class HelloNative { public native static void greeting(); } 这个例子中,我们将本地方法声明为静态的,本地方法可以是静态的也可以是非静态的。 下面,编写一个相应的 C 函数,必须以 Java 运行时间环境所期望的方式准确命名这个 函数,该函数名由 Java 前缀、包名、Java 类名和 native 方法名四部分组成,各部分之间 用下划线符号分隔开,如图 10-2 所示。

文档评论(0)

skvdnd51 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档