每個 JNI 固有方法接收特殊第一參數:JNIEnv 參數——指向 JNIEnv_ 特殊 JNI 資料結構的指標。結構元素包含指向 JVM 生成陣列的指標,每個元素為 JNI 函數指標。固有方法內部透過解引用指標調用 JNI 函數。每種 JVM 自行實現 JNI 函數,但地址在預定義偏移處。JNIEnv 參數提供存取:版本資訊、類別/物件操作、全域/區域引用控制、實例/靜態欄位存取、實例/靜態方法調用、字串/陣列操作、異常產生與控制等函數類別。
jni.h 在 #ifdef _cplusplus 內將 JNIEnv_ 定義為類別,含大量內嵌函數。C 語法 (*jEnv)->ReleaseStringUTFChars(jEnv, jMsg, msg) 可簡化為 C++ 風格 jEnv->ReleaseStringUTFChars(jMsg, msg),無需雙重解引用與重複傳遞第一參數。後續範例採用 C++ 風格。
Java 字串採 Unicode 格式。接收字串需傳給非 Unicode 函數(如 printf())時,必須用 GetStringUTFChars() 轉換為 ASCII 字元。該函數接收 Java 字串轉為 UTF-8(8 位容納 ASCII、16 位容納 Unicode;若原字串純 ASCII 則結果為 ASCII)。GetStringUTFChars 為 JNIEnv 間接指向結構的欄位,指向函數指標。用傳統 C 語法透過指標調用函數,此形式適用所有 JNI 函數存取。