在java本地方法调用中,jni.h这个文件起到的作用是什么?它和jniEvn是什么关系?为什么必须要引入jni.h...
安装好JDK的、在include目录里面,,,,,,如JDK1.6,在JDK1.6-30\include这个目录里面
native关键字修饰的方法即为本地方法,本地方法类似接口方法,不过接口方法是用abstract修饰的,不同在于虽然本地方法也看不到实现体,但实际上是由jvm在加载时调用底层实现的,本地方法的实现体不是由java代码写的,而可能由别的语言如c实现,可以理解为连接java代码和其他语言实现的代码的入口。
简单的回答就是需要本地库函数。从Java原理来讲,你还要看下文:
本地方法调用就是 Java Native Interface(JNI),JNI最终的目的是在Java端调用本地系统的方法,Java之所以跨平台是因为JVM的设计是基于堆栈的,而像C、C++是基于寄存器的,寄存器应该懂吧,每个硬件的寄存器都不相同。JAVA class类运行在JVM中,即在堆栈(逻辑的数据结构)中,这个堆栈的数据结构都一样,所以就JAVA就有了跨平台。
而有的时候JAVA想直接对计算机硬件操作,即直接对寄存器操作,那么就需要相应的本地库,jni.h就是本地库。这个本地库内的API都是完全基于寄存器来操作的。
一个字一个字敲的,不知道我说的你明白没?
如果你明白基于堆栈和寄存器的区别,理解JNI就没问题了。
jni.h文件作用是数据类型翻译,将JAVA语言的数据类型利用C的语法重新定义,实现2种不同的语法之间的数据类型转换(有的书上称为传递)。至于为什么要重新定义,而不直接使用C的数据类型原因是因为C的数据类型依赖于操作系统和硬件,不同的操作系统硬件int类型的大小不同有32 有16.通过重新定义可统一int的大小。
例如:某操作系统C语言int 16bit long 32 bit 则jni.h文件中需要按照java重新定义:typtdef long jint (在C程序中jint将代表原C中的long数据类型,可参见jni.h源文件)
不同版本操作系统对应不同的JVM不同的JVM对应不同的jni.h,故此文件必须被引入实现本地方法的C文件中。freshman_2007 的回答也值得参考。我不了解寄存器,但我想你要表达的应该就是这个意思。
关联文件吧、把类和方法连接连接到一个代码页上。不引入的花就会报错吧、全是红线了。好久没做java了 不知道说的对不对
这是C语言的头文件,Java的一些底层是调用C语言函数的。
在java本地方法调用中,jni.h这个文件起到的作用是什么?它和jniEvn...
本地方法调用就是 Java Native Interface(JNI),JNI最终的目的是在Java端调用本地系统的方法,Java之所以跨平台是因为JVM的设计是基于堆栈的,而像C、C++是基于寄存器的,寄存器应该懂吧,每个硬件的寄存器都不相同。JAVA class类运行在JVM中,即在堆栈(逻辑的数据结构)中,这个堆栈的数据结构都一样,...
java中的本地方法
远程方法调用:RMI 指的是在调用远程服务器上的JVM里的对象的方法 本地方法,就是调用本机上的JVM里的对象的方法咯 为什么要调用远程服务器上的对象的方法 当然是为了做分布式了?为什么要做分布式呢?那原因自然很多了,比如负载均衡等等
java怎么本地编译
第一步,写代码并保存为“.java”格式文件。第二步,确保环境变量设置好:在桌面电脑图标上点击右键,选着属性,调出系统,我的win7,路径---控制面板\\系统和安全\\系统,左边中部高级系统设置,打开系统属性。xp系统也找系统属性,有个高级选项,里面有环境变量按钮。打开,中下有系统变量,找到path选项...
什么是本地代码,本地方法,本地库,??是不是就是用c或c++写的程序,就是...
回答:本地代码是指编译生成后的是虚拟机代码还是本地代码。像Lua,Java,C#这类就是字节码就不是本机代码。而C++类生成的就是本地代码。
java内存机制的本地方法接口,本地方法栈,static静态数据的问题_百度知 ...
首先内存总体分为了4个部分,包括 stack segment 、heap segment、code segment 、data segment ;其中我们程序中用关键字new出来的东西都是存放在heap segment;程序中的局部变量存放在stack segment,这些局部变量是在具体方法执行结束之后,系统自动释放内存资源(而heap segment中的资源需要java垃圾回收...
在java中本地方法是什么意思?
就是用关键字native修饰的方法,通过这些方法可以调用java以外的程序,例如c语言写的程序
java中怎么调用vb编写的dll文件啊,网上找了很多例子了,都不行。希望...
JNI ,然后使用javah + java类名生成扩展名为h的头文件 ·使用C\/C++实现本地方法 ·将C\/C++编写的文件生成动态连接库 ·ok 1) 编写java程序:这里以HelloWorld为例。代码1:public class HelloWorld { public native void displayHelloWorld();\/\/所有native关键词修饰的都是对本地的声明 static { Sys...
Java栈和本地方法栈方法调用栈,这些都是什么?
本地方法栈, 和JAVA中的栈一个作用, 只是这个栈是属于本地的,不属于JAVA虚拟机,但受JAVA虚拟机的控制,因为是JAVA虚拟机简单地动态链接并直接调用指定的本地方法。可以把这看作是虚拟机利用本地方法来动态扩展自己 局部变量和对象引用存在 栈 中, 方法调用的栈帧也是在 栈 中 以上是我自己查资料+...
我用java做了一个软件(已实现本地字库调用) 问题一:如果想调用字体网站...
“已实现本地字库调用”那远程网站的,就区别不大了。先从网站下载到本地临时目录,就是本地调用一样的了。安装一个WEB服务器,就可以虚拟了,如IIS、apache等
java如何调用本地的浏览器
可以使用 Desktop ,例如:Desktop.getDesktop().browse(new URI("网址"));这样可以打开一个网址,浏览器也自然打开了。可以使用 Runtime 打开指定的浏览器,例如下面打开 谷歌浏览器。Runtime.getRuntime().exec("C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe");
暨贾爱全: 简单的回答就是需要本地库函数.从Java原理来讲,你还要看下文:本地方法调用就是 Java Native Interface(JNI),JNI最终的目的是在Java端调用本地系统的方法,Java之所以跨平台是因为JVM的设计是基于堆栈的,而像C、C++是基于寄存器的...
玛沁县17011648870: JAVA 里面如何 使用jni 给个例子 加 解释.谢谢 - ?
暨贾爱全: JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能.解决JAVA对本地操作的一种方法就是JNI. JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放...
玛沁县17011648870: 关于jni方法调用本地vc++程序,c++程序中含有包含的头文件和lib库文件,请问jni方法怎么正确调用这个程序 - ?
暨贾爱全: jni的HelloWorld: 1.编写java部分,本地方法用关键字native表示,不用带方法体, 如:private native void helloworld();2.使用命令行,linux与windos一样,在.java文件目录中使用javac,将其专为.class文件.若java部分带包,则在包的 上一级使用...
玛沁县17011648870: java本地调用如何实现 - ?
暨贾爱全: JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java 1.1 开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,...
玛沁县17011648870: 请问jni技术到底是什么?能不能简单的阐述一下? - ?
暨贾爱全: jNi就是java调用本地方法的技术,最简单的来说,java运行一个程序需要要和不同的系统平台打交道,在windows里就是和windows平台底层打交道,mac就是要和mac打交道,jvm就是通过大量的jni技术使得java能够在不同平台上运行.而使用了...
玛沁县17011648870: java中native的用法 - ?
暨贾爱全: java native方法是指本地方法,当在方法中调用一些不是由java语言写的代码或者在方法中用java语言直接操纵计算机硬件时要声明为native方法.java中,通过JNI(Java Native Interface,java本地接口)来实现本地化. Native方法一般用于两种情况:1)在方法中调用一些不是由java语言写的代码.2)在方法中用java语言直接操纵计算机硬件.
玛沁县17011648870: java中怎样调用现有的dll文件 - ?
暨贾爱全: 不太明白你的意思,是不是在Java里面调用C++写的DLL?如果那个DLL不是专门为Java调用而编写的话,就需要用JNI再写一个DLL,在那里面调用你原有的DLL.
玛沁县17011648870: 如何实现Java调用C或C++函数 - ?
暨贾爱全: 在现今的软件开发领域中,Java以其跨平台的优势得到大量的应用,其代码可以一次编译多处执行.但这种特性给Java带来了一定的局限性,幸好Java提供了完备的C/C++语言接口,这样可以利用C语言的强大功能实现Java难以实现的功能,在...
玛沁县17011648870: java如何调用c++里面的方法? - ?
暨贾爱全: Java是通过JNI调用其他语言(包括C++)编译的本地方法的,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式).如下是详细讲解:1、JAVA中所需要做的工作 在JAVA程序中,首先需...
玛沁县17011648870: Java怎么调用.net DLL - ?
暨贾爱全: JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式).通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法...