1. 程式人生 > >Java基礎之native方法

Java基礎之native方法

什麼是native方法(本地方法)

native方法就是java呼叫非java程式碼的介面。native方法是這樣一個java方法:該方法的實現由非java語言實現,比如C。

定義一個native方法,不提供方法體(類似於抽象方法)。因為其方法體是由非java語言在外面實現的。

例如Object類:

package java.lang; 
public class Object { 
  ......
  public final native Class<?> getClass(); 
  public native int hashCode(); 
  protected
native Object clone() throws CloneNotSupportedException; public final native void notify(); public final native void notifyAll(); public final native void wait(long timeout) throws InterruptedException; ...... }

識別符號native可以與所有其他java識別符號連用,但是abstract除外。因為native方法暗示方法有方法體,只不過方法體是非java的。而abstract表示沒有方法體。

如果一個含有本地方法的類被繼承,子類會繼承這個本地方法並且可以用java語言重寫這個方法(似乎有點奇怪)。但如果本地方法被final標識,它被繼承後不能被重寫。

使用方法

native方法對應的實現不在當前檔案,而是在其他語言(如C和C++)實現的檔案中。Java語言本身不能對作業系統底層進行訪問和操作,但是可以通過JNI介面呼叫其他語言來實現對底層的訪問。

JNI是Java本機介面(Java Native interface),它是JDK的一部分。JNI允許Java程式碼使用以其他語言編寫的程式碼和程式碼庫。Invocation API(JNI的一部分)可以用來將Java虛擬機器(JVM)嵌入到本機應用程式中,從而允許程式設計師在本機程式碼內部呼叫Java程式碼。

JNI的書寫步驟如下:

  1. 編寫帶有native方法的java類
  2. 使用javac編譯java類
  3. 使用javah –jni來生成字尾名為.h的標頭檔案
  4. 使用其他語言(C,C++)實現本地方法
  5. 將本地方法編寫的檔案生成動態連結庫