Java メソッドであるかネイティブ・メソッドであるかに関係なく、メソッドはすべて Java クラス内で宣言する必要があります。Java メソッドとネイティブ・メソッドの宣言の違いは、キーワード native だけです。native キーワードは、このメソッドのインプリメンテーション のある場所が、プログラムの実行時にロードされるネイティブ・ライブラリー内 であることを Java に指示します。この例のネイティブ・メソッドの宣言は、次のとおりです。
public native void callToPLI();
上記のステートメントの中で、void はこのネイティブ・メソッド呼び出し から予期される戻り値がないことを示しています。メソッド名 callToPLI( ) の空括弧は、ネイティブ・メソッドの呼び出し時に渡すパラメーターがないことを 示しています。
ネイティブ・ライブラリーが実行時にロードされるように、ネイティブ・ライブラリーをロードするステップを組み込む必要があります。ネイティブ・ライブラリーをロードする Java ステートメントは、次のとおりです。
static {
System.loadLibrary("hiFromPLI");
}
上記のステートメントでは、ダイナミック・リンク・ライブラリー (DLL) を検索してロードする ために、Java システム・メソッド System.loadLibrary(...) が呼び出されています。 PL/I ダイナミック・リンク・ライブラリー hiFromPLI.dll が、PL/I プログラム をコンパイルし、リンクするステップの間に作成されます。
callingPLI クラスには、クラスのインスタンスを生成して ネイティブ・メソッドを呼び出す main メソッドも含まれ ています。main メソッドは callingPLI のインスタンスを生成し、callToPLI() ネイティブ・メソッドを呼び出します。
このセクションで前述した点をすべて含む callingPLI クラスの 完全な定義は、次のとおりです。
public class callingPLI {
public native void callToPLI();
static {
System.loadLibrary("hiFromPLI");
}
public static void main(String[] argv) {
callingPLI callPLI = new callingPLI();
callPLI.callToPLI();
System.out.println("And Hello from Java, too!");
}
}