1. 程式人生 > >java中native關鍵字的詳解

java中native關鍵字的詳解

NO.1

native用在類的method前面,表示這個method不是用java實現的。  

NO.2

   java語言是執行在虛擬機器上的, 
java又是不允許直接訪問硬體的,(也就是java安全性的體現) 

而java想要做一些例如繪圖、畫線之類的要去操作硬體的事情的話, 
必然要用到底層一些的呼叫。 
這就引出了native的關鍵字! 

native是一個用來修飾方法的關鍵字! 
用它修飾的方法,在虛擬機器裡都有一個與這個java方法同名的函式, 
去做java想要做的事情! 
也就是說: 
呼叫到native修飾的方法, 
其實就是呼叫虛擬機器裡的一個同名方法去做要做的事! 
這也就是為什麼native方法都沒有方法體的原因! 
例如Graphics類裡有一個drawRect的方法。 
它的定義就是: 
public native void drawRect(int x, int y, int width, int height); 
呼叫到它的時候,就是告訴虛擬機器, 
我要畫一個根據x,y,width,height這些引數定義的矩形! 
而實際起到作用去畫這個矩形的, 
是虛擬機器裡的一個名為XXXX_XXXX_drawRect的C函式 
XXX使這個函式的打包路徑,和import中的XXX.XXX差不多! 

簡單說: 
其實java根本什麼也沒做, 
做的只是一些面向物件的定義(但這些定義也夠複雜) 
而“幹實事”的都一些虛擬機器裡的那些用C寫成的函式!

NO.3

使用native關鍵字說明這個方法是原生函式,也就是這個方法是用C/C++語言實現的,並且被編譯成了DLL,由java去呼叫。 
這些函式的實現體在DLL中,JDK的原始碼中並不包含,你應該是看不到的。對於不同的平臺它們也是不同的。這也是java的底層機制,實際上java就是在不同的平臺上呼叫不同的native方法實現對作業系統的訪問的。

NO.4

   native的意思就是通知作業系統, 
這個函式你必須給我實現,因為我要使用。 
所以native關鍵字的函式都是作業系統實現的, 
java只能呼叫。

NO.5

   java是跨平臺的語言,既然是跨了平臺,所付出的代價就是犧牲一些對底層的控制,而java要實現對底層的控制,就需要一些其他語言的幫助,這個就是native的作用了

相關推薦

JavaVolatile關鍵字(轉)

一、基本概念 先補充一下概念:Java 記憶體模型中的可見性、原子性和有序性。 可見性:   可見性是一種複雜的屬性,因為可見性中的錯誤總是會違揹我們的直覺。通常,我們無法確保執行讀操作的執行緒能適時地看到其他執行緒寫入的值,有時甚至是根本不可能的事情。為了確保多個執行

Javasuper關鍵字

在Java的基礎學習中,慢慢接觸到許多陌生的關鍵字,今天來講一下我所認識的super關鍵字 它的使用場景為:有繼承在⭐(必須在繼承下才能使用super) 一.super呼叫(父類)構造方法 看下面這段程式碼 class Person{ public Person(){

Java關鍵字

JAVA關鍵字與保留字說明及使用 abstract;boolean;break;byte;case;catch;char;class;continue;default;do;double;else;extends;false;final;finally;float;for;

Java常用關鍵字(不斷更新

關鍵字1.static  在類中,用static關鍵字宣告的成員變數為靜態成員變數,或者叫做類屬性,類變數。    *它為該類的公共變數,屬於類,被該類的所有例項共享,在類被載入時被顯示初始化。    *對於該類的所有物件來說,static成員變數只有一份,被該類的所有物件共

Java基礎六:JavaVolatile關鍵字

一、基本概念 先補充一下概念:Java 記憶體模型中的可見性、原子性和有序性。 可見性: 可見性是一種複雜的屬性,因為可見性中的錯誤總是會違揹我們的直覺。通常,我們無法確保執行讀操作的執行緒能適時地看到其他執行緒寫入的值,有時甚至是根本不可能的事情。為了確保多個

JavaVolatile關鍵字

一、基本概念 先補充一下概念:Java 記憶體模型中的可見性、原子性和有序性。 可見性:   可見性是一種複雜的屬性,因為可見性中的錯誤總是會違揹我們的直覺。通常,我們無法確保執行讀操作的執行緒能適時地看到其他執行緒寫入的值,有時甚至是根本不可能的事情。為了確保

javanative關鍵字

NO.1 native用在類的method前面,表示這個method不是用java實現的。   NO.2    java語言是執行在虛擬機器上的,  java又是不允許直接訪問硬體的,(也就是java安全性的體現)  而java想要做一些例如繪圖、畫線之類的要去操作硬體的事情的話,  必然要用到底層

Javanative關鍵字

   java語言是執行在虛擬機器上的,  java又是不允許直接訪問硬體的,(也就是java安全性的體現)而java想要做一些例如繪圖、畫線之類的要去操作硬體的事情的話,必然要用到底層一些的呼叫。這就引出了native的關鍵字!  native是一個用來修飾方法的關鍵字!用它修飾的方法,在虛擬機器裡都有一個

Java final ,static,native 關鍵字

final 關鍵字 含義: 最終的,不可被改變的 用途: 用於修飾類、方法、屬性和變數。 特性: 用final修飾類時,被修飾的類不可以被繼承。final類中的所有成員方法都會被隱式地指定為final

C/C++extern關鍵字

編譯器 fin 生成 接口 bcd 只需要 c++環境 結束 編程 轉自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 1 基本解釋:extern可以置於變量或者函數前,以標示變量或者

Java反射機制

turn face instance java struct () 分享 2.6 一個     序言       在學習java基礎時,由於學的不紮實,講的實用性不強,就覺得沒用,很多重要的知識就那樣一筆帶過了,像這個馬上要講的反射機制一樣,當時學的時候就忽略了,到後來學習

Java的ant

問題 noi mar gin otf left 源代碼 都是 tps 分享一套幾十個源代碼,都是vc++的,打包提供 包含指針的結構數組,初始化問題 《!———— C++ 中 export 關鍵字的尷尬處境 ————》 想做一個小東西不知從何入手 493YR誒詰B駝

JAVA幾個關鍵字

成了 同時 tcl 跟著 就是 第一次 官方 pri 區分 本篇旨在幫助準備學習Java以及剛接觸Java的朋友認識、掌握和使用static、this、super、final這幾個關鍵字的使用。Java博大精深,我也是一位正在學習和使用Java的愛好者,文中難免有不妥之處,

Java 的resultset

ins 浮點 relative 字符串類型 更新 for 變量 占用 nec 結果集(ResultSet)是數據中查詢結果返回的一種對象,可以說結果集是一個存儲查詢結果的對象,但是結果集並不僅僅具有存儲的功能,他同時還具有操縱數據的功能,可能完成對數據的更新等。   結果集

javascriptnew關鍵字

nbsp pan cnblogs undefined 百度地圖 實例 code undefine tro 和其他高級語言一樣 javascript 中也有 new 運算符,我們知道 new 運算符是用來實例化一個類,從而在內存中分配一個實例對象。 但在 javascript

Javajar命令

 做專案的時候我們肯定接觸過很多jar包,那麼jar包是什麼呢?筆者瞭解到jar是java archive file 的簡寫。從名字就可以知道,它的應用與Java息息相關。下面就詳細介紹如何自己生成jar包,這樣我們管理我們自己的程式碼(尤其是一些比較重要而且不會或者很少有修改的程式碼)。  安裝好J

JavaSimpleDateFormat用法

轉自:http://blog.csdn.net/linbooooo1987/article/details/7540999 [java]  view plain  copy

java的volatile關鍵字

  記憶體可見性   volatile是Java提供的一種輕量級的同步機制,在併發程式設計中,它也扮演著比較重要的角色。同synchronized相比(synchronized通常稱為重量級鎖),volatile更輕量級,相比使用synchronized所帶來的龐大開銷,倘若能恰當

Java物件頭

一:物件頭 HotSpot虛擬機器中,物件在記憶體中儲存的佈局可以分為三塊區域:物件頭(Header)、例項資料(Instance Data)和對齊填充(Padding)。   HotSpot虛擬機器的物件頭(Object Header)包括兩部分資訊,第一部分用於儲存物

JavaDate型別

一、Date型別的初始化 1、 Date(int year, int month, int date); 直接寫入年份是得不到正確的結果的。 因為java中Date是從1900年開始算的,所以前面的第一個引數只要填入從1900年後過了多少年就是你想要得到的年份。 月需要減1,日可以直接插入。 這種方法用的比