日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java Native關鍵字原理及作用解析

瀏覽:29日期:2022-08-20 16:36:47

初次遇見 native是在 java.lang.Object 源碼中的一個hashCode方法:

public native int hashCode();

為什么有個native呢?這是我所要學習的地方。所以下面想要總結下native。

一、認識 native 即 JNI,Java Native Interface

凡是一種語言,都希望是純。比如解決某一個方案都喜歡就單單這個語言來寫即可。Java平臺有個用戶和本地C代碼進行互操作的API,稱為Java Native Interface (Java本地接口)。

二、用 Java 調用 C 的“Hello,JNI”

我們需要按照下班方便的步驟進行:

1、創建一個Java類,里面包含著一個 native 的方法和加載庫的方法 loadLibrary。HelloNative.java 代碼如下:

public class HelloNative{ static { System.loadLibrary('HelloNative'); } public static native void sayHello(); @SuppressWarnings('static-access') public static void main(String[] args) { new HelloNative().sayHello(); }}

首先讓大家注意的是native方法,那個加載庫的到后面也起作用。native 關鍵字告訴編譯器(其實是JVM)調用的是該方法在外部定義,這里指的是C。如果大家直接運行這個代碼, JVM會告之:“A Java Exception has occurred.”控制臺輸出如下:

Exception in thread 'main' java.lang.UnsatisfiedLinkError: no HelloNative in java.library.pathat java.lang.ClassLoader.loadLibrary(Unknown Source)at java.lang.Runtime.loadLibrary0(Unknown Source)at java.lang.System.loadLibrary(Unknown Source)at HelloNative.<clinit>(HelloNative.java:5)

這是程序使用它的時候,虛擬機說不知道如何找到sayHello。下面既可以手動寫,自然泥瓦匠是用

2、運行javah,得到包含該方法的C聲明頭文件.h

將HelloNative.java ,簡單地 javac javah,如圖

就得到了下面的 HelloNative.h文件 :

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloNative */ #ifndef _Included_HelloNative#define _Included_HelloNative#ifdef __cplusplusextern 'C' {#endif/* * Class: HelloNative * Method: sayHello * Signature: ()V */JNIEXPORT void JNICALL Java_HelloNative_sayHello (JNIEnv *, jclass); #ifdef __cplusplus}#endif#endif

jni.h 這個文件,在/%JAVA_HOME%include

3、根據頭文件,寫C實現本地方法。

這里我們簡單地實現這個sayHello方法如下:

#include 'HelloNative.h'#include <stdio.h> JNIEXPORT void JNICALL Java_HelloNative_sayHello{ printf('Hello,JNI'); }

4、生成dll共享庫,然后Java程序load庫,調用即可。

在Windows上,MinGW GCC 運行如下

gcc -m64 -Wl,--add-stdcall-alias -I'C:Program FilesJavajdk1.7.0_71include' -I'C:Program FilesJavajdk1.7.0_71includeincludewin32' -shared -o HelloNative.dll HelloNative.c

-m64表示生成dll庫是64位的。然后運行 HelloNative:

java HelloNative

終于成功地可以看到控制臺打印如下:

Hello,JNI

三、JNI 調用 C 流程圖

Java Native關鍵字原理及作用解析

四、其他介紹

native是與C++聯合開發的時候用的!java自己開發不用的!

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

1。native 是用做java 和其他語言(如c++)進行協作時用的

也就是native 后的函數的實現不是用java寫的

2。既然都不是java,那就別管它的源代碼了

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

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

Java不是完美的,Java的不足除了體現在運行速度上要比傳統的C++慢許多之外,Java無法直接訪問到操作系統底層(如系統硬件等),為此Java使用native方法來擴展Java程序的功能。

可以將native方法比作Java程序同C程序的接口,其實現步驟:

1、在Java中聲明native()方法,然后編譯;

2、用javah產生一個.h文件;

3、寫一個.cpp文件實現native導出方法,其中需要包含第二步產生的.h文件(注意其中又包含了JDK帶的jni.h文件);

4、將第三步的.cpp文件編譯成動態鏈接庫文件;

5、在Java中用System.loadLibrary()方法加載第四步產生的動態鏈接庫文件,這個native()方法就可以在Java中被訪問了。

JAVA本地方法適用的情況

1.為了使用底層的主機平臺的某個特性,而這個特性不能通過JAVA API訪問

2.為了訪問一個老的系統或者使用一個已有的庫,而這個系統或這個庫不是用JAVA編寫的

3.為了加快程序的性能,而將一段時間敏感的代碼作為本地方法實現。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久99视频| 青青青免费在线视频| 最新中文字幕在线播放| 美女国产精品久久久| 国产精品黄网站| 美女精品视频在线| 久久精品三级| 视频小说一区二区| 国产一区日韩欧美| 亚洲成人精选| 亚洲精选成人| 久久不见久久见国语| 国产a亚洲精品| 成午夜精品一区二区三区软件| 中文av在线全新| 亚洲激情另类| 青青国产精品| 中文在线资源| 三级在线观看一区二区| 欧美综合精品| www成人在线视频| 综合亚洲自拍| 婷婷激情一区| 日韩有码av| 99成人超碰| 国产午夜精品一区在线观看| 亚洲永久av| 日韩欧美激情| 久久不见久久见国语| 91久久国产| 精品国产不卡| 亚洲涩涩av| 日韩欧美国产精品综合嫩v| 亚洲视频国产| 欧美精品高清| 国产精品久久久久久久久久妞妞| 久久久久久黄| 精品一区二区三区中文字幕| 国产在线不卡一区二区三区| 国产亚洲精品v| 亚洲播播91| 国产欧美欧美| 视频一区日韩精品| 久久精品二区三区| 国产精品视频3p| 亚州精品视频| 日韩精品视频网站| 亚洲日本三级| 午夜亚洲福利| 91九色综合| 日本欧美在线| 麻豆国产精品| av中文字幕在线观看第一页 | 亚洲一区成人| 久久国产欧美| 亚洲精品99| 99久精品视频在线观看视频| 美女福利一区二区三区| 日韩精品影视| 久久高清一区| 69堂精品视频在线播放| 久久麻豆视频| 久久激情婷婷| 亚洲黄色网址| 亚洲一区二区毛片| 97久久中文字幕| 麻豆精品99| 欧美影院三区| 午夜一级久久| 久久国产乱子精品免费女| 欧美精品福利| 久久影院资源站| 国产综合亚洲精品一区二| 日韩国产欧美三级| 亚洲午夜av| 国产免费av国片精品草莓男男 | 免费黄色成人| 日韩亚洲国产欧美| 亚洲精品一二| 久久精品国产亚洲aⅴ| 久久免费国产| 亚洲专区视频| 国产福利91精品一区二区| 亚洲一级影院| 免费精品视频最新在线| 婷婷五月色综合香五月| 欧美国产中文高清| 欧美特黄一区| 精品无人区麻豆乱码久久久| 欧美日韩第一| 国产高清精品二区| 精品欧美久久| 福利一区视频| 亚洲精品乱码日韩| 日韩欧美国产精品综合嫩v| 日韩久久一区| 亚洲二区免费| 国产91在线播放精品| 亚洲最新av| 亚洲黄色网址| 欧美日本二区| 日韩午夜av| 国产精品福利在线观看播放| 亚洲免费成人av在线| 欧美日韩精品免费观看视欧美高清免费大片 | 老色鬼精品视频在线观看播放| 99视频一区| а√天堂中文在线资源8| 一区二区91| 日韩天堂av| 精精国产xxxx视频在线野外| 久久精品97| 日韩精品亚洲aⅴ在线影院| 91国语精品自产拍| 国内精品福利| 久久理论电影| 四虎影视精品| 日韩在线精品| 亚洲美女久久精品| 精品成av人一区二区三区| 欧美91在线|欧美| 麻豆精品蜜桃视频网站| 国产欧美激情| 午夜天堂精品久久久久| 在线视频精品| 日韩精品一二三四| 免费在线观看视频一区| 久久国产精品久久久久久电车| 91精品二区| 亚洲三级av| 国产欧美日韩在线观看视频| 国产日韩视频| 国产一区二区三区四区二区| 国产成人免费av一区二区午夜| 不卡专区在线| 精品中文一区| 快she精品国产999| 日本aⅴ亚洲精品中文乱码| 综合激情网站| 日本视频在线一区| 国产精品资源| 成人污污视频| 一区视频在线| 日韩高清二区| 91中文字幕精品永久在线| 欧美va天堂在线| 日本国产亚洲| 快播电影网址老女人久久| 亚洲主播在线| 免费视频一区二区三区在线观看 | 欧美日韩在线观看视频小说| 91久久久精品国产| 老牛影视一区二区三区| 国产精品亚洲产品| 久久国产亚洲精品| 日本va欧美va精品发布| 久久视频国产| 国产情侣一区在线| 欧美+日本+国产+在线a∨观看| 日本久久二区| 黄色亚洲免费| 成人在线免费观看网站| 蜜桃av一区二区| 日韩一区二区三区在线免费观看| 综合色就爱涩涩涩综合婷婷| 欧美gv在线| 日韩精品第一| 国产黄大片在线观看| 亚洲专区视频| 九色精品91| 91亚洲人成网污www| 欧美日韩在线精品一区二区三区激情综合 | 快she精品国产999| 欧洲av不卡| 日本视频在线一区| 国产一区91| 久久91导航| 色婷婷亚洲mv天堂mv在影片| 日本不卡一二三区黄网| 蜜臀a∨国产成人精品| 欧美综合另类| 久久久久久久久久久妇女| 久久精品天堂| 日韩精品乱码av一区二区| 日韩精品一卡二卡三卡四卡无卡| 欧美69视频| 在线一区视频| 亚洲欧美激情诱惑| 99riav1国产精品视频| 欧美日韩激情在线一区二区三区| 日本在线成人| 久久精品xxxxx| 欧美欧美黄在线二区| 国产毛片一区二区三区| 国产极品久久久久久久久波多结野| 国产乱子精品一区二区在线观看| 国产欧美视频在线| 免费日韩一区二区三区| 欧美成人a交片免费看| 桃色一区二区|