簡單地講,一個 Native Method 就是一個Java調用非Java代碼的接囗。一個 Native Method 是這樣一個Java方法:該方法的實現由非Java語言實現,好比 C。這個特徵並不是Java所特有,不少其它的編程語言都有這一機制,好比在 C++ 中,你能夠用 extern "c" 告知C++編譯器去調用一個 C 的函數。java
"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++ 程序。ide
Native方法編寫示例:函數
public class IhaveNatives { public native void Native1(int x); native static public long Native2(); native synchronized private float Native3(Object o); native void Natives(int[] ary) throws Exception; }
spa
操作系統
Java 使用起來很是方便,然而有些層次的任務用 Java 實現起來不容易,或者咱們對程序的效率很在乎時,問題就來了。code
有時 Java 應用須要與 Java 外面的環境交互,這是本地方法存在的主要緣由。你能夠想一想 Java 須要與一些底層系統,如操做系統或某些硬件交換信息時的狀況。本地方法正是這樣一種交流機制:它爲咱們提供了一個很是簡潔的接口,並且咱們無需去了解 Java 應用以外的繁瑣的細節。blog
JVM 支持着 Java 語言自己和運行時庫,它是Java程序賴以生存的平臺,它由一個解釋器(解釋字節碼)和一些鏈接到本地代碼的庫組成。然而無論怎樣,它畢竟不是一個完整的系統,它常常依賴於一底層系統的支持。這些底層系統經常是強大的操做系統。經過使用本地方法,咱們得以用 Java 實現了jre的與底層系統的交互,甚至 JVM 的一些部分就是用 C 寫的。還有,若是咱們要使用一些 Java語言 自己沒有提供封裝的操做系統的特性時,咱們也須要使用本地方法。接口
Sun 的解釋器是用 C 實現的,這使得它能像一些普通的 C 同樣與外部交互。jre大部分是用Java實現的,它也經過一些本地方法與外界交互。例如:類java.lang.Thread的setpriority()方法是用Java實現的,可是它實現調用的是該類裏的本地方法setpriority0()。這個本地方法是用 C 實現的,並被植入JVM內部,在Windows 95的平臺上,這個本地方法最終將調用Win32 Setpriority()API。這是一個本地方法的具體實現由JVM直接提供,更多的狀況是本地方法由外部的動態連接庫(external dynamic link library)提供,而後被JVM調用。
目前該方法使用的愈來愈少了,除非是與硬件有關的應用,好比經過 Java 程序驅動打印機或者 Java 系統管理生產設備,在企業級應用中已經比較少見。由於如今的異構領域間的通訊很發達,好比能夠使用 Socket通訊,也能夠使用Web Service等等,就很少作介紹了。