NewObject函數的調用方式為:
jobject obj_new = (*env)->NewObject(env,class, methodid, paraments);
在該實例中,我們在java/Test.java 中定義了Book1類,要在CreateObj類的modifyProperty() jni方法中創建該類對象。
我們可以在src/CreateObj.c中看到該jni方法創建對象的過程:
jobject book; jclass class_book;
jmethodID md_book;
class_book = (*env)->FindClass(env,"LBook1;");
md_book = (*env)->GetMethodID(env,class_book,"<init>","(IILjava/lang/String;)V");
book = (*env)->NewObject(env,class_book,md_book,100,1,"huanghe");
在創建對象的過程中可以看到,要創建一個java類對象,首先需要得到得到使用FindClass函數得到該類,
然後使用GetMethodID方法得到該類的構造器方法id,主義在此時構造器的函數名始終為:"<init>」,
其後函數的簽名要符合函數簽名規則。在此我們的構造器有三個參數:int , int, String.
並且其返回值類型要永久為空,所以函數簽名為:"(IILjava/lang/String;)V" 然後我們調用NewObject()函數來創建該類的對象,在此之後就可以使用該對象了。
沒有留言:
張貼留言