在java本地方法调用中,jni.h这个文件起到的作用是什么?它和jniEvn是什么关系?为什么必须要引入jni.h...
发布网友
发布时间:2022-04-23 13:47
我来回答
共4个回答
热心网友
时间:2023-10-16 11:46
简单的回答就是需要本地库函数。
从Java原理来讲,你还要看下文:
本地方法调用就是 Java Native Interface(JNI),JNI最终的目的是在Java端调用本地系统的方法,Java之所以跨平台是因为JVM的设计是基于堆栈的,而像C、C++是基于寄存器的,寄存器应该懂吧,每个硬件的寄存器都不相同。JAVA class类运行在JVM中,即在堆栈(逻辑的数据结构)中,这个堆栈的数据结构都一样,所以就JAVA就有了跨平台。
而有的时候JAVA想直接对计算机硬件操作,即直接对寄存器操作,那么就需要相应的本地库,jni.h就是本地库。这个本地库内的API都是完全基于寄存器来操作的。
一个字一个字敲的,不知道我说的你明白没?
如果你明白基于堆栈和寄存器的区别,理解JNI就没问题了。
热心网友
时间:2023-10-16 11:46
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 的回答也值得参考。我不了解寄存器,但我想你要表达的应该就是这个意思。
热心网友
时间:2023-10-16 11:47
关联文件吧、把类和方法连接连接到一个代码页上。不引入的花就会报错吧、全是红线了。好久没做java了 不知道说的对不对
热心网友
时间:2023-10-16 11:47
这是C语言的头文件,Java的一些底层是调用C语言函数的。
热心网友
时间:2023-10-16 11:46
简单的回答就是需要本地库函数。
从Java原理来讲,你还要看下文:
本地方法调用就是 Java Native Interface(JNI),JNI最终的目的是在Java端调用本地系统的方法,Java之所以跨平台是因为JVM的设计是基于堆栈的,而像C、C++是基于寄存器的,寄存器应该懂吧,每个硬件的寄存器都不相同。JAVA class类运行在JVM中,即在堆栈(逻辑的数据结构)中,这个堆栈的数据结构都一样,所以就JAVA就有了跨平台。
而有的时候JAVA想直接对计算机硬件操作,即直接对寄存器操作,那么就需要相应的本地库,jni.h就是本地库。这个本地库内的API都是完全基于寄存器来操作的。
一个字一个字敲的,不知道我说的你明白没?
如果你明白基于堆栈和寄存器的区别,理解JNI就没问题了。
热心网友
时间:2023-10-16 11:46
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 的回答也值得参考。我不了解寄存器,但我想你要表达的应该就是这个意思。
热心网友
时间:2023-10-16 11:47
关联文件吧、把类和方法连接连接到一个代码页上。不引入的花就会报错吧、全是红线了。好久没做java了 不知道说的对不对
热心网友
时间:2023-10-16 11:47
这是C语言的头文件,Java的一些底层是调用C语言函数的。