C不是面向对象语言,但是C++是。这就是为什么我们不用C像C++一样来编写JNI。
在C中,JNIEnv实际上是一个包含函数指针的结构体。当然,当一个JNIEnv给你时,所有的指针都已经初始化了,因此,你可以像对象一样调用它们。
然而,this参数隐含在一个面向对象语言中,在C中作为第一个参数(pJNIEnv)。此外,JNIEnv在运行一个方法前,需要先解引用:
jclass ClassContext = (*pJNIEnv)->FindClass(pJNIEnv, “android/content/Context”);
C++代码更加自然和简单。this指针是隐式的,不需要解引用JNIEnv,作为方法没有定义任何函数指针,但是是真实成员方法:
jclass ClassContext = lJNIEnv->FindClass(“android/content/Context”);