Ich denke, Sie werden die beste Antwort aus dem Buch erhalten:
Java™ Native Interface: Programmer’s Guide and Specification, The
Wo man lesen kann:
Druck
Bevor der native Methode die native Bibliothek, die implementiert Druck geladen aufgerufen werden können, werden muss. In diesem Fall wird die native Bibliothek im statischen Initialisierer der HelloWorld-Klasse geladen. Die virtuelle Java-Maschine führt automatisch den statischen Initialisierer vor , der Methoden der HelloWorld-Klasse aufruft. Dadurch wird sichergestellt, dass die native Bibliothek geladen wird, bevor die systemeigene Methode native aufgerufen wird.
Im Allgemeinen verhindert nichts, dass Sie die Bibliothek in die Methode einer Klasse laden. Methode, das ist nicht static
. In diesem Fall müssen Sie jedoch sicherstellen, dass Sie die Bibliothek laden (indem Sie eine Methode aufrufen, die load oder loadLibrary aufruft), bevor Sie eine systemeigene Methode aufrufen.
Wenn Sie auch eine andere Version der Bibliothek laden möchten, ohne mit mehreren ClassLoadern zu spielen, können Sie immer Wrappercode verwenden. Auf diese Weise können Sie dynamisch zwischen systemeigenen Codeimplementierungen wechseln.
Werfen Sie einen Blick hier: dynamic loading of library in JNI
es nicht nennen würde per se spezielle Syntax. Die gesamte Initialisierung von statischen Feldern könnte unter Verwendung dieser Klasse durchgeführt werden, und es wurden Klassenloader- oder konfigurationsbasierte Szenarien gesehen, in denen dies auch verwendet wurde. Es ruft im Allgemeinen Code auf, den Sie "pro Klasse" und nicht pro Instanz möchten. –