ネイティブメソッドには宣言と実装の 2 つのコンポーネントがある。ネイティブメソッドの宣言は他のメソッドと同じように Java クラスで行う。ネイティブメソッド の実装は、別のソースファイルの中で別のプログラミング言語によって行う。一般に 、ネイティブメソッドの実装は関数である。
ネイティブメソッドを書くとき、種々の変数をネイティブメソッドに引き渡し、ネイ ティブメソッドから値が返るようにしたい場合が多い。また、ネイティブメソッドが Java オブジェクトのメンバ変数にアクセスし、Java オブジェクトのメソッドを呼び出したい場合もよくある。このレッスンでは、このようなことを行う方法について説 明する。
このレッスンでは文字置換プログラムを実装する短い例を使用する。このプログラムは InputFile および OutputFile という名前の 2 つの Java クラスを用いる。こ れらはそれぞれ読み取り可能ファイルと書き込み可能ファイルを実装するものである 。これらのクラスにはどちらも 3 つのネイティブメソッドがある。 ネイティブメソッドの実装について細かく探求する前に、まずこの例をよく理解する 。
Java 側では、Java クラスの中でネイティブメソッドを宣言する。 ネイティブ言語側では、ネイティブメソッドに対する実装を行う。 ネイティブメソッドを書くときは、Java のメソッドシグニチャがネイティブ言語側 の関数シグニチャと "一致する" よう注意する必要がある。
ネイティブメソッドにはどのような型の引数でも引き渡すことができる。これには整数、フロート、論理型値のようなプリミティブデータ型の引数や、配列、文字列、オブジェクトのようなリファレンスデータ型の引数が含まれる。
ネイティブメソッドから値を返し、Java 側でその値を解釈する方法を示す。またこ のページでは、ネイティブメソッドの引数を通してデータを返す方法についても説明 する。
あるオブジェクトをネイティブメソッドに引き渡した後のその使い方を示す。このページでは、オブジェクトのメンバ変数にアクセスし、ネイティブメソッドの中からオブジェクトのメソッドを呼び出すためのユーティリティマクロおよび関数のコレクションについて説明する。
この節では、Java 文字列をネイティブメソッドから操作するためのユーティリティ関数のコレクションについて説明する。
ネイティブメソッドは同期をとることができる。このページでは、ネイティブで、スレッドの同期に重要な役割を果たす wait()
や notify()
メソッドに相当するものを示す。
ネイティブメソッドは、通常の Java メソッドと同じように、例外割り込みをあげることができる。