了解下JAVA的会见JNI函数:JNIEnv自变量
先谈谈我对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顶尖高手是做不来的), 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 是一种使用者不需花费很多时间学习的语言 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
页:
[1]
2