亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

解析本地方法映射Java層的數據類型

2024-07-14 08:40:13
字體:
來源:轉載
供稿:網友

前言

Java 語言上定義了不同的數據類型,比如有基礎類型int、double等等,還有所有類的父類Object等,這些都是 Java 層面的類型,而使用本地方法的處理過程需要有它們對應的類型。

大概的流程

Java 層編寫的本地方法,被編譯器編譯為字節碼,字節碼將按照規范將不同類型的參數給記錄到 class 文件中,比如 B 表示 byte、I 表示 int、J 表示 long 等等。那么一個如下的本地方法,被記錄為(Ljava/lang/Object;II)V。

public static native void test(Object o, int i, int i2);

上述對應的方法被注冊JVM中,當執行到調用本地方法時則會按照類型映射轉換成本地數據類型,比如int->jint和Object->jobject。這里其實 int 和 jint 在 C++ 中是一樣的,只是用 typedef 定義了另外一個名稱而已,而 jobject 是一個指針,執行引擎在執行 Java 層邏輯時生成了 Object 對象,它在 JVM 層有專門的數據結構,這里的 jobject 就是指向這個結構的指針,在需要使用時可以強制轉換成 JVM 層的數據結構,然后即可對其進行操作。另外,JVM 中用 oop 來表示對象指針。

基礎類型映射

 

Java Type Native Type value
boolean jboolean true或false
byte jbyte -128~127
short jshort -pow(2,15)~pow(2,15)-1
int jint -pow(2,31)~pow(2,31)-1
long jlong -pow(2,63)~pow(2,63)-1
float jfloat IEEE754標準單精度浮點數
double jdouble IEEE754標準雙精度浮點數
char jchar 16位不帶符號,Unicode字符

 

引用類型映射

除了基礎的類型映射外,Java 層其他對象類型為引用類型,那么本地方法對應的是 jobject 類型,另外,它還會派生出經常用的一些子類,比如 jstring、jclass 等等,具體如下,

class _jobject {};class _jclass : public _jobject {};class _jthrowable : public _jobject {};class _jstring : public _jobject {};class _jarray : public _jobject {};class _jbooleanArray : public _jarray {};class _jbyteArray : public _jarray {};class _jcharArray : public _jarray {};class _jshortArray : public _jarray {};class _jintArray : public _jarray {};class _jlongArray : public _jarray {};class _jfloatArray : public _jarray {};class _jdoubleArray : public _jarray {};class _jobjectArray : public _jarray {};

可以看到定義了_jobject類,該類為空類,而其他的類包括_jclass _jthrowable _jstring _jarray都是繼承_jobject類。此外,數組類型還派生出了9個子類,分別對應基礎類型數組和引用類型數組。

前面定義完類后再定義指針別名,這里的就是本地方法的類型了。另外,這些都是 C++ 的定義,如果是 C 編譯器則會使用 struct 來定義 _jobject,而非 class。

typedef _jobject *jobject;typedef _jclass *jclass;typedef _jthrowable *jthrowable;typedef _jstring *jstring;typedef _jarray *jarray;typedef _jbooleanArray *jbooleanArray;typedef _jbyteArray *jbyteArray;typedef _jcharArray *jcharArray;typedef _jshortArray *jshortArray;typedef _jintArray *jintArray;typedef _jlongArray *jlongArray;typedef _jfloatArray *jfloatArray;typedef _jdoubleArray *jdoubleArray;typedef _jobjectArray *jobjectArray;

CPP的空類

上面的引用類型定義為空類,這里了解下C++的空類,通常我們要定義一個空類可以如下兩種方式,

class Empty{}struct Empty{}

經過上述定義后的空類,它的大小為1,但是一個空類啥都沒有的話它有什么用呢?其實它可以用來區分不同的對象,空類定義的不同對象擁有不同的地址,使用new操作出來的對象也有不同的指針,而且空類也能區分不同的類別。

指針轉換

所以有了這些類型映射后我們是怎么聯系起來使用的呢?其實很簡單,答案就是進行指針轉換,前面提到過 Java 層的對象在 JVM 中是有一定的數據結構的,即用 oop 來表示對象指針,那么 jobject 可以作如下轉換,其中 handle 即為 jobject 類型。

oop result = *reinterpret_cast<oop*>(handle);

轉換成 oop 后要進一步處理就很方便了,比如想要獲取一些類相關的元數據時可以使用其中的 klass 來獲取。

總結

以上,Java 層定義的類型在本地方法有著與之相對應的數據類型,而且 Java 層源碼被編譯為字節碼后保存了本地方法參數對應的類型,JVM 執行時可以根據不同的類型轉換成本地方法對應的類型,而本地方法定義的類型都為空類,主要作用是用來綁定對象,并且可以區分對象類型,在必要時刻通過指針轉換即可訪問對象或類元數據。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
原创国产精品91| 97精品国产91久久久久久| 亚洲精品自拍偷拍| 91欧美精品午夜性色福利在线| 国内精品伊人久久| 一区二区三区精品99久久| 久久久精品国产亚洲| 色哟哟亚洲精品一区二区| 欧美美女操人视频| 一区二区三区四区精品| 伊人久久精品视频| 一本一道久久a久久精品逆3p| 精品综合久久久久久97| 在线精品视频视频中文字幕| 中文.日本.精品| 欧美色道久久88综合亚洲精品| 国产精品福利网| 九九热精品视频在线播放| 色在人av网站天堂精品| 91精品国产乱码久久久久久久久| 91精品国产高清久久久久久91| 日韩一区av在线| 91精品久久久久久久久青青| 97国产成人精品视频| 欧美日韩国产丝袜美女| 久国内精品在线| 日韩精品在线观看视频| 日韩不卡中文字幕| 亚洲自拍另类欧美丝袜| 日韩av观看网址| 91久久精品国产91久久性色| 在线播放亚洲激情| 精品国产鲁一鲁一区二区张丽| 欧美日韩国产成人在线观看| 亚洲成在人线av| 91夜夜未满十八勿入爽爽影院| 国产成人啪精品视频免费网| 国产午夜精品理论片a级探花| 亚洲成人黄色在线观看| 欧美大尺度在线观看| 欧美在线视频网站| 一区二区三区在线播放欧美| 中国china体内裑精亚洲片| 国内精品免费午夜毛片| 国外成人在线播放| 性色av一区二区三区在线观看| 91九色国产在线| 日韩精品免费综合视频在线播放| 91在线观看欧美日韩| 在线视频中文亚洲| 国产精品麻豆va在线播放| 国产精品久久久久av免费| 热久久美女精品天天吊色| 亚洲女人初尝黑人巨大| 久久精品国产一区二区三区| 成人av在线亚洲| 亚洲一区二区三区xxx视频| 性欧美视频videos6一9| 亚洲第一精品夜夜躁人人躁| 日韩成人激情影院| 亚洲男人天堂九九视频| 隔壁老王国产在线精品| 国产美女精品视频| 亚洲小视频在线观看| 国产成人精彩在线视频九色| 国产欧美日韩丝袜精品一区| 欧美在线观看日本一区| 激情懂色av一区av二区av| www.亚洲天堂| 亚洲欧美视频在线| 欧美激情一级二级| 国产精品一久久香蕉国产线看观看| 欧美与欧洲交xxxx免费观看| 中文字幕亚洲一区二区三区| 欧美洲成人男女午夜视频| 日韩av第一页| 中文字幕欧美日韩精品| 久久国产精品99国产精| 国产精品永久免费观看| 久久久女女女女999久久| 久久久噜噜噜久久中文字免| 成人伊人精品色xxxx视频| 国产精品v片在线观看不卡| 色妞在线综合亚洲欧美| 少妇久久久久久| 这里只有精品在线播放| 91夜夜揉人人捏人人添红杏| 成人黄色大片在线免费观看| 亚洲成人在线网| 久久精品国产91精品亚洲| 日韩在线视频国产| 91美女高潮出水| 欧美成人sm免费视频| 国内精品视频久久| 亚洲第一区中文99精品| 国产亚洲成av人片在线观看桃| 久久亚洲精品中文字幕冲田杏梨| 欧美精品www| 亚洲最大福利网站| 国产成人啪精品视频免费网| 欧美日韩国产一中文字不卡| 中文字幕精品久久| 成人高清视频观看www| 亚洲三级黄色在线观看| 欧美激情一区二区久久久| 亚洲第一中文字幕在线观看| 欧美电影免费观看高清完整| 国产精品欧美激情在线播放| 日韩国产精品视频| 亚洲国产精品yw在线观看| 日韩专区中文字幕| 国产在线拍揄自揄视频不卡99| 精品亚洲va在线va天堂资源站| 亚洲欧美日韩在线一区| 亚洲欧美日韩久久久久久| 欧美黑人一级爽快片淫片高清| 精品国模在线视频| zzijzzij亚洲日本成熟少妇| 欧美日韩在线视频观看| 中文字幕亚洲一区二区三区五十路| 欧美日韩国产综合新一区| 国产精品福利网| 欧美日韩一区二区免费视频| 亚洲精品国产精品国自产观看浪潮| 亚洲欧洲高清在线| 成人444kkkk在线观看| 精品无人区太爽高潮在线播放| 疯狂做受xxxx高潮欧美日本| 日韩专区在线观看| 亚洲欧美制服丝袜| 国产成人在线精品| 成人在线激情视频| 欧美视频在线免费| 91久久精品日日躁夜夜躁国产| 欧美高清性猛交| 高清亚洲成在人网站天堂| 97av在线播放| 97精品国产97久久久久久免费| 国产丝袜一区二区三区免费视频| 尤物精品国产第一福利三区| 亚洲男人天堂2024| 欧美寡妇偷汉性猛交| 高清欧美电影在线| 亚洲激情视频在线| 亚洲欧美在线一区二区| 成人xxxxx| 韩国三级电影久久久久久| 国产精品jvid在线观看蜜臀| 国产成人精品av| 91久久夜色精品国产网站| 久久精品美女视频网站| 91精品国产91久久久久久久久| 国产日韩欧美黄色| 久久久久久网站| 在线精品国产成人综合| 国产91在线视频| 国产婷婷97碰碰久久人人蜜臀| 欧美一级淫片aaaaaaa视频| 亚洲色图激情小说| 亚洲毛茸茸少妇高潮呻吟| 国产精品白嫩初高中害羞小美女| 亚洲另类欧美自拍| 这里只有视频精品| 亚洲老头老太hd|