案例三:C代碼訪問Java對象的實例變量html
獲取對象的實例變量的步驟:java
1. 經過GetObjectClass()方法得到此對象的類引用數組
2. 經過類引用的GetFieldID()方法得到實例變量的Field ID.函數
你須要提供 變量名,字段類型描述符spa
注意:這裏不要漏了分號";"htm
int => "I" ,byte => "B",short => "S",long => "J",float => "F",double => "D",char => "C",boolean => "Z"對象
如Object數組,用"[L/java/lang/Object;"表示blog
int數組,用"[I"表示get
3. 基於FieldID,經過GetObjectField()方法或Get<基本類型>Field()方法獲取實例變量。編譯
4. 若是須要更新實例變量,能夠使用SetObjectField()或Set<基本類型>Field()函數進行
如下是JNI用於獲取實例變量的函數:(來自於頭文件jni.h)
此案例全部文件:
(1)建立Java程序
定義兩個實例變量,一個爲基本類型,另外一個爲對象類型。利用C代碼對其進行更改,而後輸出結果,校驗其實例變量是否改變。
(2)編譯Java程序,並生成相關頭文件
(3)編寫源文件實現。
根據上述描述的獲取成員變量的步驟進行。
注:因爲String在c語言中沒有直接映射的類型,只能經過相關函數轉換爲以'\0'結尾的字符數組。
(4)生成動態連接庫,注這裏直接指定庫名爲libdemo3.so,至於爲什麼要加前綴lib,請看前文
(5)執行Java程序
由圖可知,C代碼成功改變了Java對象實例變量的值。