static { ... }は,staticブロック というもので, クラスがロードされた時に実行されるブロックである. Linuxでは,Helloを指定すると, libHello.soというファイルをロードする.
// Hello.java: import java.lang.*; import java.io.*; public class Hello{ static{ System.loadLibrary("Hello"); } public Hello(){ } public native void greeting(); public static void main(String args[]){ Hello h = new Hello(); h.greeting(); } }javahで生成されるプログラムは以下のようになる.
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class Hello */ #ifndef _Included_Hello #define _Included_Hello #ifdef __cplusplus extern "C" { #endif /* * Class: Hello * Method: greeting * Signature: ()V */ JNIEXPORT void JNICALL Java_Hello_greeting (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif