什麼是本地方法?
簡單地講,一個Native Method是一個Java呼叫非Java程式碼的接囗
一個Native Method是這樣一個Java方法:該方法的實現由非Java語言實現,比如C。
這個特徵並非Java所特有,很多其它的程式語言都有這一機制 機製,比如在C++中,你可以用extern 告知C++編譯器去呼叫一個C的函數。
「A native method is a Java method whose implementation is provided by non-java code.」(本地方法是一個非Java的方法,它的具體實現是非Java程式碼的實現)
在定義一個native method時,並不提供實現體(有些像定義一個Java interface),因爲其實現體是由非java語言在外面實現的。
本地介面的作用是融合不同的程式語言爲Java所用,它的初衷是融合C/C++程式。
native 方法舉例
Object 類的 getClass() 方法
public final native Class<?> getClass();
Thread 類的 start() 方法
public synchronized void start() {
/**
* This method is not invoked for the main method thread or "system"
* group threads created/set up by the VM. Any new functionality added
* to this method in the future may have to also be added to the VM.
*
* A zero status value corresponds to state "NEW".
*/
if (threadStatus != 0)
throw new IllegalThreadStateException();
/* Notify the group that this thread is about to be started
* so that it can be added to the group's list of threads
* and the group's unstarted count can be decremented. */
group.add(this);
boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
/* do nothing. If start0 threw a Throwable then
it will be passed up the call stack */
}
}
}
private native void start0();
public class IHaveNatives {
public native void Native1(int x);
public native static long Native2();
private native synchronized float Native3(Object o);
native void Native4(int[] ary) throws Exception;
}
爲什麼要使用 Native Method?
Java使用起來非常方便,然而有些層次的任務用Java實現起來不容易,或者我們對程式的效率很在意時,問題就來了。
與Java環境的互動
與操作系統的互動
Sun’s Java
本地方法的現狀
目前該方法使用的越來越少了,除非是與硬體有關的應用,比如通過Java程式驅動印表機或者Java系統管理生產裝置,在企業級應用中已經比較少見。因爲現在的異構領域間的通訊很發達,比如可以使用Socket通訊,也可以使用Web Service等等,不多做介紹。