簡單範例:Java 程式調用固有方法,後者調用 Win32 MessageBox() 顯示圖形文字框。非 Win32 平台替換 windows.h 為 stdio.h、MessageBox() 為 printf()。
編寫固有方法宣告與參數。static 區塊調用 System.loadLibrary("MsgImpl") 載入 DLL 建立連結。DLL 必須在系統路徑或含類別檔目錄。JVM 自動添加平台適當副檔名。
編譯 Java 源檔,對 .class 運行 javah -jni ShowMsgBox(必須指定 -jni 參數使用 Java 1.1 JNI)。javah 讀取類別檔,為每個固有方法生成 C/C++ 標頭檔函數原型。輸出包含:jni.h、JNIEXPORT/JNICALL 宏(適配平台導向命令)、JNIEnv/jobject/jstring JNI 資料類型。檔案可由 C/C++ 編譯器編譯。
JNI 統一固有方法命名規則,屬於 JVM 連結機制一部分。所有固有方法以「Java」開頭,後接 Java 方法名,底線分隔。方法「過載」時追加函數簽名。註釋中可見原生簽名。
編寫 C/C++ 源檔包含 javah 生成標頭檔,實作固有方法,編譯連結生成 MsgImpl.dll。核心代碼:DllMain 返回 TRUE;固有方法實作透過 JNIEnv 調用 GetStringUTFChars 取得字串、調用 MessageBox()、釋放字串資源。參數對應:第一參數 JNIEnv 含回調 JVM 掛鉤;第二參數非 static 方法相當 C++ this 指標,static 方法為 Class 物件引用;剩餘參數對應 Java 傳遞物件,主類型按值傳遞。