Java基礎之native方法
阿新 • • 發佈:2019-01-01
什麼是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的書寫步驟如下:
- 編寫帶有native方法的java類
- 使用javac編譯java類
- 使用javah –jni來生成字尾名為.h的標頭檔案
- 使用其他語言(C,C++)實現本地方法
- 將本地方法編寫的檔案生成動態連結庫