仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1751|回复: 20
打印 上一主题 下一主题

[学习教程] 了解下JAVA的会见JNI函数:JNIEnv自变量

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:34:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。
使用JNI函数,程序员可从一个固无方法的外部与JVM打交道。正如人人在后面的例子中看到的那样,每一个JNI固无方法城市吸收一个特别的自变量作为本人的第一个参数:JNIEnv自变量——它是指向范例为JNIEnv_的一个特别JNI数据布局的指针。JNI数据布局的一个元素是指向由JVM天生的一个数组的指针;该数组的每一个元素都是指向一个JNI函数的指针。可从固无方法的外部收回对JNI函数的挪用,做法是取消对这些指针的援用(详细的操纵实践很复杂)。每种JVM都以本人的体例完成了JNI函数,但它们的地点一定位于事后界说好的偏移处。
使用JNIEnv自变量,程序员可会见一系列函数。这些函数可分别为下述种别:
■猎取版本信息
■举行类和对象操纵
■把持对Java对象的全局和部分援用
■会见实例字段和静态字段
■挪用实例办法和静态办法
■实行字串和数组操纵
■发生和把持Java非常
JNI函数的数目相称多,这里不再胪陈。相反,我会向人人展现利用这些函数时面前的一些基础道理。欲懂得更具体的情形,请参阅本人所用编译器的JNI文档。
若察看一下jni.h头文件,就会发明在#ifdef_cplusplus预处置器前提的外部,当由C++编译器编译时,JNIEnv_布局被界说成一个类。这个类包括了大批内嵌函数。经由过程一种复杂并且熟习的语法,这些函数让我们能够沉着会见JNI函数。比方,前例包括了上面这行代码:
(*jEnv)->ReleaseStringUTFChars(jEnv,jMsg,msg);
它在C++里可改写成上面这个模样:
jEnv->ReleaseStringUTFChars(jMsg,msg);
人人可注重到本人不再必要同时取消对jEnv的两个援用,不异的指针不再作为第一个参数传送给JNI函数挪用。在这些例子剩下的中央,我会利用C++作风的代码。
1.会见Java字串
作为会见JNI函数的一个例子,请思索上述的代码。在这里,我们使用JNIEnv的自变量jEnv来会见一个Java字串。Java字串接纳的是Unicode格局,以是倘使收到如许一个字串,并想把它传给一个非Unicode函数(如printf()),起首必需用JNI函数GetStringUTFChars()将其转换成ASCII字符。该函数能吸收一个Java字串,然后把它转换成UTF-8字符(用8位宽度包容ASCII值,或用16位宽度包容Unicode;若原始字串的内容完整由ASCII组成,那末了局字串也是ASCII)。
GetStringUTFChars是JNIEnv直接指向的谁人布局里的一个字段,而这个字段又是指向一个函数的指针。为会见JNI函数,我们用传统的C语法来挪用一个函数(经由过程指针)。使用上述情势可完成对一切JNI函数的会见。

java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),
飘灵儿 该用户已被删除
沙发
发表于 2015-1-21 10:27:08 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
海妖 该用户已被删除
板凳
发表于 2015-1-30 15:02:45 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
小妖女 该用户已被删除
地板
发表于 2015-2-1 10:07:30 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
蒙在股里 该用户已被删除
5#
发表于 2015-2-1 13:22:15 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
透明 该用户已被删除
6#
发表于 2015-2-2 19:28:17 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
老尸 该用户已被删除
7#
发表于 2015-2-3 19:56:03 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
若天明 该用户已被删除
8#
发表于 2015-2-7 01:40:57 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
金色的骷髅 该用户已被删除
9#
发表于 2015-2-19 09:43:12 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
小女巫 该用户已被删除
10#
 楼主| 发表于 2015-3-6 14:27:51 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
飘飘悠悠 该用户已被删除
11#
发表于 2015-3-8 19:09:22 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
山那边是海 该用户已被删除
12#
发表于 2015-3-16 11:46:17 | 只看该作者
是一种使用者不需花费很多时间学习的语言
13#
发表于 2015-3-22 22:25:29 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
分手快乐 该用户已被删除
14#
发表于 2015-3-24 02:02:58 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
愤怒的大鸟 该用户已被删除
15#
发表于 2015-4-1 16:11:04 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
只想知道 该用户已被删除
16#
发表于 2015-4-5 12:29:47 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
第二个灵魂 该用户已被删除
17#
发表于 2015-4-12 01:46:32 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
因胸联盟 该用户已被删除
18#
发表于 2015-4-24 15:07:01 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
简单生活 该用户已被删除
19#
发表于 2015-4-28 18:45:07 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
小魔女 该用户已被删除
20#
发表于 2015-5-12 01:24:53 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 07:12

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表