大家好,今天小编关注到一个有意思的话题,就是关于java可以调用c语言的问题,于是小编就整理了4个相关介绍Java可以调用c语言的解答,让我们一起看看吧。
如何在C/c++中调用J***a_C/C++?
我觉得C++调用J***a也蛮复杂的,手机回复就不上代码了,大致步骤是1. 创建JVM初始化JVM的一些参数,并通过JNI_CreateJ******M创建出JVM和JNIEnv2. 加载类通过JNIEnv的方法FindClass加载你要的J***a类,如Foo3. 调用构造函数,并创建对象利用JNIEnv的GetMethodID方法,注意这里面的参数填写<init>表明是构造函数,然后把结果传入JNIEnv的NewObject方法创建对象4.方法调用配合JNIEnv的GetMethodID获取到JMethodID,然后再利用JNIEnv的CallXXXMethod即可(需要第三步创建出的jobject)
将j***a程序转换成c语言?
j***a是带GC的,所以根本不存在算法可以保证所有j***a代码转成c++之后都跟原来长得差不多。譬如j***a8用lambda表达式构成一个环,你C++当场就跪了。
为什么j***a自带的一些工具类不使用c语言来写
首先,j***a语言要在很多平台上运行,用c语言写的话,你得每个平台都编译一次,每个平台都要对应优化,麻不麻烦,而且产生不同的好几个库,增大运行时体积。
第二,并不是说c语言写就一定好,用c写很考验程序员的编程水平,作为一个工具类,就要追求性能,考虑内存、指针、代码优化等等复杂问题。而目前jit的优化功能已经非常强大了,在很多情况下运行速度与c语言相差无几。
第三,这些代码都要被用户的j***a代码调用,如果要在c实现那么这些工具类就必须要弄一套jni调用,会增加不必要的运行时开销,代码复杂度增加。另外如果要在c实现,那就意味着放弃了已经写好的j***a优良特点不用,捡了芝麻丢了西瓜,例如垃圾回收,异常捕捉等非常方便的特性。
第四,方便调试,设想,***如工具类是用c写的,一个j***a程序员调用这个库,结果出异常了,你得从j***a调试器换到支持c的调试器,例如gdb,lldb等等,然后学习怎么调试,找c里面的bug,这对于一个j***a程序员来说,是非常痛苦的。而用如果j***a写的话直接就可以调试,并且可以使用j***a的异常机制。
如果你j***a和c都会那当然是可以,如果不会c那就还是老老实实玩j***a把,就说一点,调用的C肯定编译后的,逻辑肯定看不了,报个错,你不得当场去世,要简单拓展一下,也是当场懵逼,j***a写你好歹能看懂一点,这个方式是可行的,但并不适合只会j***a的程序员
J***a JNA,C语言函数的参数为结构体的二级指针,如何转换为J***a的参数?
C语言结构体是特殊的类,二级指针也是一个地址。转j***a函数需要将二级指针变成J***a中的所指对象即可。
如果转函数,两种语言不同,有时是需要进行较大变量层面调整的。
到此,以上就是小编对于j***a可以调用c语言的问题就介绍到这了,希望介绍关于j***a可以调用c语言的4点解答对大家有用。