以ä¸åä¸ç¹æ¥è®²è¿°ä¸ä¸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çå¾å¤å¥½å¤ãå¦æå«æ éæ©ï¼æ们å¯ä»¥éæ©ä½¿ç¨æ¬å°æ¹æ³ã
温馨提示:答案为网友推荐,仅供参考