易截截图软件、单文件、免安装、纯绿色、仅160KB

Java本地接口(Java Native Interface (JNI))

JNI工作原理
在JNI中,本地函数是通过一个独立的.c或.cpp文件来实现的(C++为JNI提供的界面会更简洁一些)。当JVM调用该函数时,它传递了一个JNIEnv指针、一个jobject指针和通过Java方法定义的Java参数,JNI函数的形式如下:
JNIEXPORT void JNICALL Java_ClassName_MethodName
  (JNIEnv *env, jobjectobj)
{
    //Method native implemenation
}
env指针是一个包含了JVM接口的结构,它包含了与JVM进行交互以及与Java对象协同工作所必需的函数,示例中的JNI函数可以在本地数组和Java数组类型之间、本地字符串和Java字符串类型之间进行转换,其功能还包括对象的实例化、抛出异常等。基本上您可以使用JNIEnv来实现所有Java能做到的事情,虽然要简单很多。
更加正式的解释是这样的,本地代码通过调用JNI的函数来访问JVM,这是通过一个界面指针实现的(界面指针实际上是指向指针的指针),该指针指向一个指针数组,数组中的每个指针都指向了一个界面函数,而每个界面函数都是在数组中预先定义过的。
本地方法将JNI界面指针当作一个参数,如果在同一个Java线程中,出现对该本地方法的多重调用,JVM则保证传递相同的界面指针到本地方法。不过,一个本地方法可以被不同的Java线程调用,因而也可能会收到不同的JNI界面指针。
 
本地方法是通过System.loadLibrary方法加载的,在以下的例子中,类的初始化方法加载了一个指定平台的本地类库,该类库定义了本地方法:
packagepkg;  
class Cls { 
     native double f(inti, String s); 
     static { 
         System.loadLibrary(pkg_Cls"); 
     } 
}
system.loadLibrary方法的参数是一个类库的名称,它可以由程序员任意选取,系统则遵循一个标准的本地化平台的方式来转换类库的名称到一个本地类库的名称。例如,在Solaris操作系统中会将pkg_Cls转换为libpkg_Cls.so,而Win32系统则会将同样的pkg_Cls转换为pkg_Cls.dll。
  动态指针会根据它们的名字来进行解析,一个本地方法的名称是按照组件进行连接的,它包含了:前缀“Java_”、一个分离的合法的类名称和一个分离的方法名称。
注意:微软的JVM有相同的机制从Java调用本地Windows代码,该机制被称为原始本地接口(Raw Native


相关文档:

java每个初学者应该搞懂的问题

对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。
问题一:我声明了什么!
String s = "Hello world!";
许多人都做过这样的事情,但是,我们到底声明了什么?回答通常 ......

分享java写的电驴下载完成关机小程序

自己研究下verycd下载套路,发现一个downloads.txt文件同步正在下载的资源信息,下载完成后自动删除里面的记录,这就简单多了.
思路:读downloads.txt文件,利用关键字把里面的记录分割后加入list,选择监视的文件名,利用while循环的倒计时方法以文件名为关键字从list里定时搜索,如果下载完成,调用runtime类运行dos命令shutdown, ......

每个初学者都应该搞懂的问题(Java)

很久没有做java的项目了,今天逛了逛CSDN的论坛,很幸运的遇到这篇文章,写的不错。有几个要点,以前理解的都不透。所以收藏了,谢谢论坛ID:为 yrjxm007 的网友。 对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重 ......

java杂想

采用欲扬先抑的手法谈谈java:
      java没有指针只有引用是最大的败笔.正因为没有指针,很多操作要迂回婉转;垃圾收集机制也觉得是鸡肋,写个析构函数真的那么复杂吗, 有必要牺牲灵活性吗;函数调用的代价之高让人抓狂
但我还是选择了她:
      java的纯面向对象特 ......

Java学习 从入门到精通


Java Learning Path (一)、工具篇
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号