導航:首頁 > 編程語言 > javanat

javanat

發布時間:2023-09-29 13:21:05

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的native方法適用的情況:
1、為了使用底層的主機平台的某個特性,而這個特性不能通過JAVA API訪問。
2、為了訪問一個老的系統或者使用一個已有的庫,而這個系統或這個庫不是用JAVA編寫的。
3、為了加快程序的性能,而將一段時間敏感的代碼作為本地方法實現。

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

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

③ 什麼是native輸出

JAVA中的native是什麼?

native主要用於方法上

1、一個native方法就是一個Java調用非Java代碼的介面。一個native方法是指該方法的實現由非Java語言實現,比如用C或C++實現。
2、在定義一個native方法時,並不提供實現體(比較像定義一個Java Interface),因為其實現體是由非Java語言在外面實現的。

native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前文件,而是在用其他語言(如C和C++)實現的文件中。Java語言本身不能對操作系統底層進行訪問和操作,但是可以通過JNI介面調用其他語言來實現對底層的訪問。

JNI是Java本機介面(Java Native Interface),是一個本機編程介面,它是Java軟體開發工具箱(Java Software Development Kit,SDK)的一部分。JNI允許Java代碼使用以其他語言編寫的代碼和代碼庫。Invocation API(JNI的一部分)可以用來將Java虛擬機(JVM)嵌入到本機應用程序中,從而允許程序員從本機代碼內部調用Java代碼。

不過,對Java外部的調用通常不能移植到其他平台,在applet中還可能引發安全異常。實現本地代碼將使您的Java應用程序無法通過100%純Java測試。但是,如果必須執行本地調用,則要考慮幾個准則:

1.將您的所有本地方法都封裝到一個類中,這個類調用單個的DLL。對每一種目標操作系統平台,都可以用特定於適當平台的版本的DLL。這樣可以將本地代碼的影響減少到最小,並有助於將以後所需要的移植問題考慮在內。

2.本地方法盡量簡單。盡量使您的本地方法對第三方(包括Microsoft)運行時DLL的依賴減少到最小。使您的本地方法盡量獨立,以將載入您的DLL和應用程序所需的開銷減少到最小。如果需要運行時DLL,必須隨應用程序一起提供。

JNI的書寫步驟如下:

a.編寫帶有native聲明的方法的Java類

b.使用javac命令編譯編寫的Java類

c.使用java -jni ****來生成後綴名為.h的頭文件

d.使用其他語言(C、C++)實現本地方法

e.將本地方法編寫的文件生成動態鏈接庫

以下是一個在Java中調用本地C程序的簡單的例子:

a.編寫HelloWorld.java類

class HelloWorld {
public native void hello();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().hello();
}
}

b.編譯

javac HelloWorld.java

c.生成.h文件

javah -jni HelloWorld

生成內容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */ #
include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {#
endif
/*
* Class: HelloWorld
* Method: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv * , jobject);#
ifdef __cplusplus
}#
endif# endif

第一個參數是調用JNI方法時使用的JNI Environment指針。第二個參數是指向在此Java代碼中實例化的Java對象HelloWorld的一個句柄。其他參數是方法本身的參數

d.c實現

#include < jni.h >
#include "HelloWorld.h"
#include < stdio.h >
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv * env, jobject obj) {
printf("Hello World!\n");
return;
}

其中,第一行是將jni.h文件引入(在%JAVA_HOME%\include目錄下),里邊有JNIEnv和jobject的定義。

e.編譯c實現

這里以在Windows中為例,需要生成dll文件。在保存HelloWorldImpl.c文件夾下面,使用VC的編譯器cl成。

cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll

注意:生成的dll文件名在選項-Fe後面配置,這里是hello,因為在HelloWorld.java文件中我們loadLibary的時候使用的名字是hello。當然這里修改之後那裡也需要修改。另外需要將-I%java_home%\include -I%java_home%\include\win32參數加上,因為在第四步裡面編寫本地方法的時候引入了jni.h文件。

6) 運行程序

java HelloWorld 就ok了!
文章知識點與官方知識檔案匹配
Java技能樹首頁概覽
91537 人正在系統學習中
打開CSDN APP,看更多技術內容

Java當中native方法的詳解_先苦後甜似淡非定的博客_native方法...
一、認識 native 即 JNI,Java Native Interface 凡是一種語言,都希望是純。比如解決某一個方案都喜歡就單單這個語言來寫即可。Java平台有個用戶和本地C代碼進行互操作的API,稱為Java Native Interface (Java本地介面)。 回到頂部 二...
繼續訪問
JAVA中的native是什麼有什麼用_Rsun04551的博客_java中native...
1、一個native方法就是一個Java調用非Java代碼的介面。一個native方法是指該方法的實現由非Java語言實現,比如用C或C++實現 2、在定義一個native方法時,並不提供實現體(比較像定義一個Java Interface),因為其實現體是由非Java語言在外面...
繼續訪問
【基礎】Java的native方法作用和意義
Java的native方法作用和意義
繼續訪問
最新發布 Java關鍵字之native詳解
native 用來修飾方法,用 native 聲明的方法表示告知 JVM 調用,該方法在外部定義,我們可以用任何語言去實現它。簡單地講,一個native Method就是一個 Java 調用非 Java 代碼的介面。
繼續訪問

java之native關鍵字詳細解析_碼農研究僧的博客
publicnativeStringintern(); 1 1. 概念 深究其native這個關鍵字 其主要表現為 只要有一個native方法,內部結構是Java調用非Java代碼介面 所謂的非java代碼,主要是指c或者c++實現,可以不深究其代碼實現,只需要會調用即可 ...
繼續訪問
java中的Native方法_消逝者的博客_java native方法
一. 什麼是Native Method 簡單地講,一個Native Method就是一個java調用非java代碼的介面。一個Native Method是這樣一個java的方法:該方法的實現由非java語言實現,比如C。這個特徵並非java所特有,很多其它的編程語言都有這一機制,比如在...
繼續訪問
Java中的native方法
原文鏈接:java中的native方法 Java不是完美的,Java的不足除了體現在運行速度上要比傳統的C++慢許多之外,Java無法直接訪問到操作系統底層(如系統硬體等),為此Java使用native方法來擴展Java程序的功能。 可以將native方法比作Java程序同C程序的介面,其實現步驟: 1、在Java中聲明native()方法,然後編譯。 2、用javah產生一個
繼續訪問
JNI使用及簡單封裝
提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄前言一、Java調用C++二、使用步驟1.引入庫2.讀入數據總結 前言 提示:這里可以添加本文要記錄的大概內容: 本文主要記錄JNI實踐中的使用場景,Java調用C++ ,C++回調Java的實現過程,帶簡單封裝思路。 提示:以下是本篇文章正文內容,下面案例可供參考 一、Java調用C++ ##1, 示例:pandas 是基於NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。 二、使用步驟 1.引入庫 代碼如下(示.
繼續訪問

java中native方法實現_詳解Java中native方法的使用_勤婧知浩的博客-C...
今天在網上學習時碰到有關於native修飾符所修飾的方法,上網查了查,覺得很有意思記錄一下 1、native簡介 簡單地講,一個Native Method就是一個java調用非java代碼的介面。一個Native Method是這樣一個java的方法:該方法的實現由非java語言...
繼續訪問
java native方法_深入理解Java虛擬機_weixin_39557087的博客-CSDN...
native方法就是非Java的方法,比如可能是C 實現的,在位元組碼文件中並不會體現,所以native方法的計數器值是空的。比如System.currentTimeMillis();方法就是一個native方法,聲明如下: (); ...
繼續訪問
java的native_Java關鍵字(二)——native
本篇博客我們將介紹Java中的一個關鍵字——native。native 關鍵字在 JDK 源碼中很多類中都有,在 Object.java類中,其 getClass() 方法、hashCode()方法、clone() 方法等等都是用 native 關鍵字修飾的。public final native Class> getClass();public native int hashCode();...
繼續訪問
Java native方法詳解
一. 什麼是Native Method 簡單地講,一個Native Method就是一個java調用非java代碼的介面。一個Native Method是這樣一個java的方法:該方法的實現由非java語言實現,比如C。這個特徵並非java所特有,很多其它的編程語言都有這一機制,比如在C++中,你可以用extern "C"告知C++編譯器去調用一個C的函數。 "A native method
繼續訪問
java中的native是什麼
native主要用於方法上 一個native方法就是一個Java調用非Java代碼的介面。一個native方法是指該方法的實現由非Java語言實現,比如用C或C++實現。

閱讀全文

與javanat相關的資料

熱點內容
程序員投行 瀏覽:313
java多線程讀取文件 瀏覽:145
香港外貿伺服器有什麼好處 瀏覽:612
鄧倫參加密室大逃脫結果變成團寵 瀏覽:847
購買文件伺服器怎麼選擇 瀏覽:720
空調壓縮機高壓報警 瀏覽:498
u盤數控程序放哪個文件夾 瀏覽:853
python模擬微信登錄其他APP 瀏覽:301
綁扎鋼筋加密區規范 瀏覽:671
怎麼更換手機壁紙安卓 瀏覽:808
閑魚app賣手機怎麼走驗機 瀏覽:821
安卓三個按鍵音怎麼關閉 瀏覽:64
esp8266手機app源碼 瀏覽:713
伺服器如何建立多個站點 瀏覽:151
加密狗可以在筆記本上做賬嗎 瀏覽:888
學生雲伺服器推薦 瀏覽:509
android銀行卡快捷支付 瀏覽:828
海口手機直播系統源碼 瀏覽:416
怎麼給加密貨幣加圖標 瀏覽:999
phpheader編碼 瀏覽:766