激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - 詳解Java中native方法的使用

詳解Java中native方法的使用

2020-09-16 14:12咖啡味的茶 JAVA教程

native是與C++聯合開發的時候用的!使用native關鍵字說明這個方法是原生函數,也就是這個方法是用C/C++語言實現的,并且被編譯成了DLL,由java去調用。本文給大家介紹java 中native方法使用,感興趣的朋友一起看看吧

今天在網上學習時碰到有關于 native修飾符所修飾的方法,上網查了查,覺得很有意思記錄一下

詳解Java中native方法的使用

1、native簡介

簡單地講,一個Native Method就是一個java調用非java代碼的接口。一個Native Method是這樣一個java的方法:該方法的實現由非java語言實現,比如C。這個特征并非java所特有,很多其它的編程語言都有這一機制,比如在C++中,你可以用extern “C”告知C++編譯器去調用一個C的函數。

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

native 是用做java 和其他語言(如c++)進行協作時使用的,也就是native 后的函數的實現不是用java寫的。
既然都不是java,那就別管它的源代碼了,我們只需要知道這個方法已經被實現即可。
native的意思就是通知操作系統, 這個函數你必須給我實現,因為我要使用。 所以native關鍵字的函數都是操作系統實現的, java只能調用。
java是跨平臺的語言,既然是跨了平臺,所付出的代價就是犧牲一些對底層的控制,而java要實現對底層的控制,就需要一些其他語言的幫助,這個就是native的作用了。

2、native用法

1.編寫帶有native聲明的方法的Java類(java文件)
2.使用javac命令編譯編寫的Java類(class文件)如:javac NativeTest.java
3.使用javah -jni ****來生成后綴名為.h的頭文件(.h的文件) 如:javah -jni NativeTest
4.使用其他語言(C、C++)實現本地方法
5.將本地方法編寫的文件生成動態鏈接庫(dll文件)

注意:javac NativeTest.java 沒有帶包名,因為我的NativeTest.java不在任何包(package)中。

示例如下:

?
1
2
3
4
5
6
7
8
9
public class NativeTest {
 public native void hello(String name);
 static{
  System.loadLibrary("wittdong");//wittdong和生成動態鏈接庫的 wittdong.dll名字一致
 }
 public static void main(String[] args){
  new NativeTest().hello("jni");
 }
}

詳解Java中native方法的使用

打開 javah 編譯出 后綴名為 .h 的文件圖:

詳解Java中native方法的使用

4、用C語言實現本地方法(hello),生成 NativeTestImpl.c 格式文件

?
1
2
3
4
5
6
#include <jni.h>
#include “NativeTest.h”
#include <stdio.h>
JNIEXPORT void JNICALL Java_NativeTest_hello(JNIEnv *env,jobject obj, jstring name){
printf(“hello world”);
}

5、生成動態鏈接庫

一種方式:cl -I %java_home%\include -I%java_home%\include\win32 -LD NativeTestImpl.c -Fe wittdong.dll

另一種方式:用VC++6.0編譯一下在debug文件夾中就生成好了dll文件。

將dll放到生成.h的那一級文件夾中,就可以進行native本地方法調用。在Eclipse執行時,需把dll文件拷貝到C:\Windows\System32

3、補充資料

c語言中.c和.h文件關系以及區別:

本質上沒有任何區別。 只不過一般:.h文件是頭文件,內含函數聲明、宏定義、結構體定義等內容

.c文件是程序文件,內含函數實現,變量定義等內容。而且是什么后綴也沒有關系,只不過編譯器會默認對某些后綴的文件采取某些動作。你可以強制編譯器把任何后綴的文件都當作c文件來編。

這樣分開寫成兩個文件是一個良好的編程風格。

而且,比方說 我在aaa.h里定義了一個函數的聲明,然后我在aaa.h的同一個目錄下建立aaa.c ,aaa.c里定義了這個函數的實現,然后是在main函數所在.c文件里#include這個aaa.h 然后我就可以使用這個函數了。 main在運行時就會找到這個定義了這個函數的aaa.c文件。

這是因為:

main函數為標準C/C++的程序入口,編譯器會先找到該函數所在的文件。

假定編譯程序編譯myproj.c(其中含main())時,發現它include了mylib.h(其中聲明了函數void test()),那么此時編譯器將按照事先設定的路徑(Include路徑列表及代碼文件所在的路徑)查找與之同名的實現文件(擴展名為.cpp或.c,此例中為mylib.c)(應該是跟java的import一樣),如果找到該文件,并在其中找到該函數(此例中為void test())的實現代碼,則繼續編譯;如果在指定目錄找不到實現文件,或者在該文件及后續的各include文件中未找到實現代碼,則返回一個編譯錯誤.其實include的過程完全可以"看成"是一個文件拼接的過程,將聲明和實現分別寫在頭文件及C文件中,或者將二者同時寫在頭文件中,理論上沒有本質的區別。

到此這篇關于詳解Java中native方法的使用的文章就介紹到這了,更多相關java 中native方法使用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/adsdaas/article/details/108615446

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久久电影网站 | 九九热精品免费视频 | 中文字幕在线视频日本 | 黄污网站在线观看 | 91九色蝌蚪国产 | 毛片在线视频观看 | 一本色道久久综合亚洲精品图片 | 天天躁狠狠躁夜躁2020挡不住 | 亚洲va在线 | 香蕉国产9 | 中文在线观看免费视频 | 操碰 | 黄色片小说| 色蜜桃av | 史上最强炼体老祖动漫在线观看 | 久久久久女人精品毛片九一 | 国产亚洲精品久久久久5区 综合激情网 | 福利免费观看 | 他也色在线视频 | 国产一区二区影视 | av在线一区二区三区四区 | 国产精品1区2区在线观看 | 成人在线免费看 | 超碰在线97国产 | 国产精品一区在线观看 | 国产精品入口夜色视频大尺度 | 国产精品啪一品二区三区粉嫩 | 午夜影院在线免费观看 | xxxx18韩国护士hd老师 | 国内精品伊人久久 | 久久久久亚洲国产精品 | 操碰视频在线观看 | 国产色视频免费 | 毛片a级毛片免费播放100 | 欧美黄 片免费观看 | 日韩av在线网 | 欧美a级在线免费观看 | 国产精品一区二区免费在线观看 | 日本免费大片免费视频 | 国产精品视频一区二区三区四 | 一级色毛片 |