導航:首頁 > 研究方法 > native方法是什麼

native方法是什麼

發布時間:2022-02-23 11:09:36

① Java的方法區和本地方法區有何不同什麼是Native Method

java的方法區在jdk7及以前是永久代,使用的是虛擬機的內存,而到了jdk8,元空間取代了永久代,使用的是本地的內存。
Native Method是本地方法的意思,非java編寫,比如c/c++,一般用於操作底層的硬體。在java中通過本地方法介面也就是帶native修飾符的方法來調用本地方法。

② Java 中native方法的應用

這個一般不要求程序員掌握,他是一種寫java時用的語言,C++,你只要知道就可以,並不需要了解,除非你是做底層開發的

③ native方法的用法

形容詞 a.

1.天生的
2.出生地的,祖國的,家鄉的[B]
They are native speakers of English.
他們的母語是英語。
He has been away from his native Poland for three years.
他離開故土波蘭已有三年了。
3.本土的,本國的,土生的[B][(+to)]
The giant panda is native to China.
大熊貓是中國特有的動物。
She was native to Taipei.
她原籍台北。
4.(某地)特有的,原產的[(+to)]
5.土人的,土著的
Native American
美洲原住民;印第安人
6.天然的,自然的;樸素的
I am still struck by the native beauty of the lake.
我仍然為湖泊的自然美所吸引。

名詞 n. [c]

1.本地人,本國人[(+of)]
Are you a native here, or just a visitor?
你是本地人?或者只是過客?
2.土著,原住民[P1]
3.(某地)原有的動(植)物[(+of)]
The kangaroo is a native of Australia.
袋鼠是澳大利亞的土生動物。

④ Android 中Native方法是怎樣調用的

1. Power.java--> find corresponding native cfile(查找對應的具體用C實現的C文件)
android.os.Power.java -------- native file ---->.../jni/android_os_Power.c

2. in android_os_Power.c, you canfind:

static JNINativeMethod method_table[]= // Native functiontable
{
{"acquireWakeLock", "(ILjava/lang/String;)V", (void*)acquireWakeLock},
{"releaseWakeLock", "(Ljava/lang/String;)V", (void*)releaseWakeLock},
{"setLastUserActivityTimeout", "(J)I",(void*)setLastUserActivityTimeout },
{"setScreenState", "(Z)I", (void*)setScreenState },
{"shutdown", "()V", (void*)android_os_Power_shutdown },
{ "reboot","(Ljava/lang/String;)V", (void*)android_os_Power_reboot },
};

int register_android_os_Power(JNIEnv *env)// function to register mapping tablefrom name to function
{
returnAndroidRuntime::registerNativeMethods(
env, "android/os/Power",
method_table, NELEM(method_table));
}
3. in /framework/base/core/jni , a file named:AndroidRuntime.cpp

3.1) a global register function array
static const RegJNIRec gRegJNI[] =
{
...
register_android_os_Power,
}

3.2) Register native function process
int AndroidRuntime::startReg(JNIEnv* env)
or
Java_com_android_internal_util_WithFramework_registerNatives(...)
or
Java_LoadClass_registerNatives(....)
---> register_jni_procs(gRegJNI, NELEM(gRegJNI),env)
---> foreach(member of gRegJNI) call register_XXX_XXX_XXX..XXX() //so here register_android_os_power() will becalled
---> AndroidRuntime::registerNativeMethods(env, class_namelike "android/os/Power", method table like method_table,size)
---> jniRegisterNativeMethods(env, className,gMethods, numMethods)
-->pEnv->RegisterNatives(env, clazz, gMethods,numMethods) ;
--> foreach(method) calldvmRegisterJNIMethod(ClassObject* clazz, const char*methodName,
constchar* signature, void* fnPtr)
--> calldvmSetNativeFunc(method, dvmCallSynchronizedJNIMethod, fnPtr); //for sycn method
or
call dvmSetNativeFunc(method, dvmCallJNIMethod,fnPtr);
--> ((Method*)method)->insns = insns; // set actual codespace to be executed for a native function

4.calling a native method ( JNI method)
void dvmPlatformInvoke(void* pEnv,ClassObject* clazz, int argInfo, int argc,
const u4*argv, const char* shorty, void* func, JValue*pReturn)
dvmCallMethod() /dvmInvokeMethod
---> if(dvmIsNativeMethod(method))
{
(*method->nativeFunc)(self->curFrame,&retval, method, self);
}

⑤ @Native 什麼意思

一個Native Method就是一個java調用非java代碼的介面。一個Native Method是這樣一個java的方法:該方法的實現由非java語言實現,比如C。這個特徵並非java所特有,很多其它的編程語言都有這一機制,比如在C++中,你可以用extern"C"告知C++編譯器去調用一個C的函數。

一個nativemethod方法可以返回任何java類型,包括非基本類型,而且同樣可以進行異常控制。這些方法的實現體可以制一個異常並且將其拋出,這一點與java的方法非常相似。當一個native method接收到一些非基本類型時如Object或一個整型數組時,這個方法可以訪問這非些基本型的內部。

(5)native方法是什麼擴展閱讀

在JAVA編程語言中是一個抽象類型,是抽象方法的集合,介面通常以interface來聲明。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。

介面並不是類,編寫介面的方式和類很相似,但是它們屬於不同的概念。類描述對象的屬性和方法。介面則包含類要實現的方法。除非實現介面的類是抽象類,否則該類要定義介面中的所有方法。

介面無法被實例化,但是可以被實現。一個實現介面的類,必須實現介面內所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,介面類型可用來聲明一個變數,他們可以成為一個空指針。

⑥ android 的native方法,在哪使用System.loadLib()方法

不是loadLib,是

static{
System.loadLibrary("你的庫名");
}

這個是在類被載入的時候載入的,也就是你的Test。你說的有些沒有使用load,是因為在系統啟動的時候so已經被載入了。你可以通過命令行看到系統裡面的很多so:

如果so被載入了,你就不需要再使用載入代碼,可以直接用native介面

⑦ 怎樣理解java native方法

什麼是Native Method
簡單地講,一個Native Method就是一個java調用非java代碼的介面。一個Native Method是這樣一個java的方法:該方法的實現由非java語言實現,比如C。這個特徵並非java所特有,很多其它的編程語言都有這一機制,比如在C++中,你可以用extern "C"告知C++編譯器去調用一個C的函數。
"A native method is a Java method whose implementation is provided by non-java code."
在定義一個native method時,並不提供實現體(有些像定義一個java interface),因為其實現體是由非java語言在外面實現的。,下面給了一個示例:
public class IHaveNatives
{
native public void Native1( int x ) ;
native static public long Native2() ;
native synchronized private float Native3( Object o ) ;
native void Native4( int[] ary ) throws Exception ;
}
這些方法的聲明描述了一些非java代碼在這些java代碼里看起來像什麼樣子(view).
標識符native可以與所有其它的java標識符連用,但是abstract除外。這是合理的,因為native暗示這些方法是有實現體的,只不過這些實現體是非java的,但是abstract卻顯然的指明這些方法無實現體。native與其它java標識符連用時,其意義同非Native Method並無差別,比如native static表明這個方法可以在不產生類的實例時直接調用,這非常方便,比如當你想用一個native method去調用一個C的類庫時。上面的第三個方法用到了native synchronized,JVM在進入這個方法的實現體之前會執行同步鎖機制(就像java的多線程。)
一個native method方法可以返回任何java類型,包括非基本類型,而且同樣可以進行異常控制。這些方法的實現體可以制一個異常並且將其拋出,這一點與java的方法非常相似。當一個native method接收到一些非基本類型時如Object或一個整型數組時,這個方法可以訪問這非些基本型的內部,但是這將使這個native方法依賴於你所訪問的java類的實現。有一點要牢牢記住:我們可以在一個native method的本地實現中訪問所有的java特性,但是這要依賴於你所訪問的java特性的實現,而且這樣做遠遠不如在java語言中使用那些特性方便和容易。
native method的存在並不會對其他類調用這些本地方法產生任何影響,實際上調用這些方法的其他類甚至不知道它所調用的是一個本地方法。JVM將控制調用本地方法的所有細節。需要注意當我們將一個本地方法聲明為final的情況。用java實現的方法體在被編譯時可能會因為內聯而產生效率上的提升。但是一個native final方法是否也能獲得這樣的好處卻是值得懷疑的,但是這只是一個代碼優化方面的問題,對功能實現沒有影響。
如果一個含有本地方法的類被繼承,子類會繼承這個本地方法並且可以用java語言重寫這個方法(這個似乎看起來有些奇怪),同樣的如果一個本地方法被fianl標識,它被繼承後不能被重寫。
本地方法非常有用,因為它有效地擴充了jvm.事實上,我們所寫的java代碼已經用到了本地方法,在sun的java的並發(多線程)的機制實現中,許多與操作系統的接觸點都用到了本地方法,這使得java程序能夠超越java運行時的界限。有了本地方法,java程序可以做任何應用層次的任務。

⑧ java中的native關鍵字有什麼作用

以下分三點來講述一下java native:

1、什麼是Native Method
簡單地講,一個Native Method就是一個java調用非java代碼的介面。一個Native Method是這樣一個java的方法:該方法的實現由非java語言實現,比如C。這個特徵並非java所特有,很多其它的編程語言都有這一機制,比如在C++中,你可以用extern "C"告知C++編譯器去調用一個C的函數。
"A native method is a Java method whose implementation is provided by non-java code."
在定義一個native method時,並不提供實現體(有些像定義一個java interface),因為其實現體是由非java語言在外面實現的。,下面給了一個示例:
public class IHaveNatives
{
native public void Native1( int x ) ;
native static public long Native2() ;
native synchronized private float Native3( Object o ) ;
native void Native4( int[] ary ) throws Exception ;
}
這些方法的聲明描述了一些非java代碼在這些java代碼里看起來像什麼樣子(view).
標識符native可以與所有其它的java標識符連用,但是abstract除外。這是合理的,因為native暗示這些方法是有實現體的,只不過這些實現體是非java的,但是abstract卻顯然的指明這些方法無實現體。native與其它java標識符連用時,其意義同非Native Method並無差別,比如native static表明這個方法可以在不產生類的實例時直接調用,這非常方便,比如當你想用一個native method去調用一個C的類庫時。上面的第三個方法用到了native synchronized,JVM在進入這個方法的實現體之前會執行同步鎖機制(就像java的多線程。)
一個native method方法可以返回任何java類型,包括非基本類型,而且同樣可以進行異常控制。這些方法的實現體可以制一個異常並且將其拋出,這一點與java的方法非常相似。當一個native method接收到一些非基本類型時如Object或一個整型數組時,這個方法可以訪問這非些基本型的內部,但是這將使這個native方法依賴於你所訪問的java類的實現。有一點要牢牢記住:我們可以在一個native method的本地實現中訪問所有的java特性,但是這要依賴於你所訪問的java特性的實現,而且這樣做遠遠不如在java語言中使用那些特性方便和容易。
native method的存在並不會對其他類調用這些本地方法產生任何影響,實際上調用這些方法的其他類甚至不知道它所調用的是一個本地方法。JVM將控制調用本地方法的所有細節。需要注意當我們將一個本地方法聲明為final的情況。用java實現的方法體在被編譯時可能會因為內聯而產生效率上的提升。但是一個native final方法是否也能獲得這樣的好處卻是值得懷疑的,但是這只是一個代碼優化方面的問題,對功能實現沒有影響。
如果一個含有本地方法的類被繼承,子類會繼承這個本地方法並且可以用java語言重寫這個方法(這個似乎看起來有些奇怪),同樣的如果一個本地方法被fianl標識,它被繼承後不能被重寫。
本地方法非常有用,因為它有效地擴充了jvm.事實上,我們所寫的java代碼已經用到了本地方法,在sun的java的並發(多線程)的機制實現中,許多與操作系統的接觸點都用到了本地方法,這使得java程序能夠超越java運行時的界限。有了本地方法,java程序可以做任何應用層次的任務。

2、為什麼要使用Native Method
java使用起來非常方便,然而有些層次的任務用java實現起來不容易,或者我們對程序的效率很在意時,問題就來了。
與java環境外交互:
有時java應用需要與java外面的環境交互。這是本地方法存在的主要原因,你可以想想java需要與一些底層系統如操作系統或某些硬體交換信息時的情況。本地方法正是這樣一種交流機制:它為我們提供了一個非常簡潔的介面,而且我們無需去了解java應用之外的繁瑣的細節。
與操作系統交互:
JVM支持著java語言本身和運行時庫,它是java程序賴以生存的平台,它由一個解釋器(解釋位元組碼)和一些連接到本地代碼的庫組成。然而不管怎 樣,它畢竟不是一個完整的系統,它經常依賴於一些底層(underneath在下面的)系統的支持。這些底層系統常常是強大的操作系統。通過使用本地方法,我們得以用java實現了jre的與底層系統的交互,甚至JVM的一些部分就是用C寫的,還有,如果我們要使用一些java語言本身沒有提供封裝的操作系統的特性時,我們也需要使用本地方法。
Sun's 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調用。

3、JVM怎樣使Native Method跑起來:
我們知道,當一個類第一次被使用到時,這個類的位元組碼會被載入到內存,並且只會回載一次。在這個被載入的位元組碼的入口維持著一個該類所有方法描述符的list,這些方法描述符包含這樣一些信息:方法代碼存於何處,它有哪些參數,方法的描述符(public之類)等等。
如果一個方法描述符內有native,這個描述符塊將有一個指向該方法的實現的指針。這些實現在一些DLL文件內,但是它們會被操作系統載入到java程序的地址空間。當一個帶有本地方法的類被載入時,其相關的DLL並未被載入,因此指向方法實現的指針並不會被設置。當本地方法被調用之前,這些DLL才會被載入,這是通過調用java.system.loadLibrary()實現的。

最後需要提示的是,使用本地方法是有開銷的,它喪失了java的很多好處。如果別無選擇,我們可以選擇使用本地方法。

⑨ Android中怎麼查看native方法的定義

在Android裡面,init程序會解析 Init.rc文件,然後啟動很多Native Service。如何查看這些service的狀態呢,查看init的源代碼,發現所有的native service的信息都會保存到系統屬性裡面。這樣就可以用下面的命令查看各個Service的狀態。

# getprop |grep init.svc
getprop |grep init.svc
[init.svc.servicemanager]: [running]
[init.svc.vold]: [running]
[init.svc.netd]: [running]
[init.svc.debuggerd]: [running]
[init.svc.omsril-daemon]: [running]
[init.svc.sdm]: [running]
[init.svc.zygote]: [running]
[init.svc.media]: [running]
[init.svc.dbus]: [running]
[init.svc.installd]: [running]
[init.svc.keystore]: [running]
[init.svc.lapisrv]: [running]
[init.svc.console]: [running]
[init.svc.tcmd-autolaunch]: [stopped]
[init.svc.tel]: [stopped]
[init.svc.pxa920-setup]: [stopped]
[init.svc.logcat]: [running]
[init.svc.logcat-radio]: [running]
[init.svc.dnsmasq]: [running]
[init.svc.powerpolicy]: [stopped]
[init.svc.adbd]: [running]
[init.svc.telserver]: [stopped]
[init.svc.bootanim]: [stopped]
[init.svc.fmradiod]: [stopped]
[init.svc.wpa_supplicant]: [running]
[init.svc.dhcpcd]: [running]

⑩ 如何查找native方法

去下載open jdk的源碼就可以了

閱讀全文

與native方法是什麼相關的資料

熱點內容
內啡肽含量檢測方法 瀏覽:927
簡單兒童圍巾的編織方法 瀏覽:517
被水蒸氣燙了土方法怎麼辦 瀏覽:51
數據分析方法實驗報告 瀏覽:33
薰衣草油使用方法 瀏覽:78
精油正確吸入方法 瀏覽:869
新鄉甲醛檢測方法 瀏覽:804
安卓手機的運行方法菜單在哪裡 瀏覽:186
有沒有捏土快速進步的方法 瀏覽:833
毛線勾花瓣的正確方法 瀏覽:850
童聲合唱排練的基本步驟與方法 瀏覽:880
冰箱什麼方法除冰更快更好 瀏覽:351
腎功能正常的檢測方法 瀏覽:76
道路技術方案或研究方法 瀏覽:987
紫銅止水片安裝方法圖 瀏覽:650
有什麼方法找到監控在哪裡 瀏覽:471
寫好導語的方法有哪些 瀏覽:877
黨史教育的研究方法 瀏覽:971
楊氏太極拳肩帶肘的正確鍛煉方法 瀏覽:837
醫用雙氧水的使用方法 瀏覽:166