Previous | Next | Trail Map | Integrating Native Methods into Java
Programs | ステップバイステップ


ステップ 1: Java コードを書く

次の 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() メ ソッドは引数を取らない。


Previous | Next | Trail Map | Integrating Native Methods into Java
Programs | ステップバイステップ