ステップバイステップ |
次の Java コードセグメントは、1 つのメソッドをもったHelloWorld
という名前のクラスと静的コードセグメントを定義している。class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } }ネイティブメソッドを定義する
HelloWorld
クラスのdisplayHelloWorld()
メソッドは、次に示すようにメソッド定義の一部にnative
キーワードがあることから、実装が別のプログラミング 言語で書かれていることがわかる。このメソッド定義が提供するのはpublic native void displayHelloWorld();displayHelloWorld()
のメソッド シグニチャだけであり、実装はいっさい提供しない。displayHelloWorld()
の実装は、別個のC 言語ソースファイルで行われる。
displayHelloWorld()
のメソッド定義では、メソッドがパブリックな インスタンスメソッドであること、および引数を受け入れず値を返さないことも示し ている。引数のネイティブメソッドへの引き渡しおよびネイティブメソッドからの値 の返しに関する詳細は、 。他のメソッドと同様、ネイティブメソッドは Java クラス内で定義されなければならない。
ライブラリをロードする
displayHelloWorld
を実装するC 言語コードは、 動的にロード可能なライブラリにコンパイルし (この手順は ステップ 6: 動的にロード可能なライブラリを作成するで説明する)、それを必 要とする Java クラスにロードされなければならない。Java クラスにライブラリを ロードすると、ネイティブメソッドの実装がクラスの定義にマップされる。
HelloWorld
クラスの後に続く静的コードブロックは、hello
と名前の付いた適切なライブラリをロードする。実行時システムは、クラスをロードするとき、そのクラスの静的コードブロックを実行する。static { System.loadLibrary("hello"); }loadLibrary()
メソッドは System クラスの一部である。メインプログラムを作成する
Main.java という名前の別のソースファイルに、HelloWorld
をインスタンス化し、displayHelloWorld()
ネイティブメソッドを呼び出す Java アプリケーションを作成する。上のコード例からわかるように、ネイティブメソッドの呼び出しは通常メソッドの呼 び出しと同じ方法で行う。つまり、オブジェクト名、ピリオド ('.') の後にメソッ ド名を追加するだけである。メソッド名の後には、一組のカッコ '(' と ')' で囲まれた、メソッドに引き渡す引数が続く。この例のclass Main { public static void main(String args[]) { new HelloWorld().displayHelloWorld(); } }displayHelloWorld()
メ ソッドは引数を取らない。
ステップバイステップ |