ภาษา Java กำหนดชนิดข้อมูลที่แตกต่างกันเช่นประเภทพื้นฐาน int, double, ฯลฯ รวมถึงวัตถุคลาสแม่ของคลาสทั้งหมด ฯลฯ เหล่านี้เป็นประเภทระดับ Java และกระบวนการประมวลผลโดยใช้วิธีการในท้องถิ่นต้องใช้ประเภทที่สอดคล้องกัน
วิธีการดั้งเดิมที่เขียนในเลเยอร์ Java จะถูกรวบรวมเป็น bytecode โดยคอมไพเลอร์ bytecode จะบันทึกพารามิเตอร์ประเภทต่าง ๆ ลงในไฟล์คลาสตามข้อกำหนดเช่น B หมายถึงไบต์ฉันแสดงถึง int, j หมายถึงความยาว ฯลฯ จากนั้นวิธีการท้องถิ่นดังต่อไปนี้จะถูกบันทึกเป็น (ljava/lang/object; ii) v
การทดสอบโมฆะพื้นเมืองแบบคงที่สาธารณะ (Object O, int i, int i2);
วิธีการที่สอดคล้องกันข้างต้นลงทะเบียนใน JVM เมื่อดำเนินการเพื่อเรียกวิธีการในท้องถิ่นชนิดข้อมูลท้องถิ่นจะถูกแปลงตามแผนที่ประเภทเช่น int-> jint และ object-> Jobject ในความเป็นจริง int และ jint เหมือนกันใน C ++ เพียงใช้ TypEdef เพื่อกำหนดชื่ออื่น Jobject เป็นตัวชี้ เอ็นจิ้นการดำเนินการสร้างวัตถุวัตถุเมื่อดำเนินการตรรกะเลเยอร์ Java มันมีโครงสร้างข้อมูลพิเศษในชั้น JVM งานที่นี่เป็นตัวชี้ไปยังโครงสร้างนี้ เมื่อจำเป็นต้องใช้มันสามารถถูกส่งเข้าไปในโครงสร้างข้อมูลของเลเยอร์ JVM และจากนั้นก็สามารถดำเนินการได้ นอกจากนี้ OOP ยังใช้ใน JVM เพื่อเป็นตัวแทนของพอยน์เตอร์วัตถุ
| ประเภท Java | ประเภทพื้นเมือง | ค่า |
|---|---|---|
| บูลีน | jboolean | จริงหรือเท็จ |
| ไบต์ | jbyte | -128 ~ 127 |
| สั้น | jshort | -pow (2,15) ~ POW (2,15) -1 |
| int | การเขียน | -pow (2,31) ~ POW (2,31) -1 |
| ยาว | jlong | -pow (2,63) ~ Pow (2,63) -1 |
| ลอย | jfloat | IEEE754 หมายเลขจุดลอยความแม่นยำเดียวมาตรฐาน |
| สองเท่า | jdouble | IEEE754 หมายเลขจุดลอยตัวแบบสองเท่ามาตรฐาน |
| ถ่าน | jchar | อักขระ Unicode ที่ไม่ได้ลงชื่อ 16 บิต |
นอกเหนือจากการแมปประเภทพื้นฐานแล้วประเภทวัตถุอื่น ๆ ในเลเยอร์ Java เป็นประเภทอ้างอิงดังนั้นวิธีการในท้องถิ่นจึงสอดคล้องกับประเภทงาน นอกจากนี้มันจะได้รับ subclasses ที่ใช้กันทั่วไปเช่น JString, jclass ฯลฯ ดังนี้
คลาส _jobject {}; คลาส _jclass: สาธารณะ _jobject {}; คลาส _jthrowable: สาธารณะ _jobject {}; คลาส _jstring: สาธารณะ _jobject {}; คลาส _jrray: สาธารณะ _jobject {}; _jarray {}; คลาส _jchararray: สาธารณะ _jarray {}; คลาส _jshortarray: สาธารณะ _jarray {}; คลาส _jintarray: สาธารณะ _jarray {}; คลาส _jlongarray: สาธารณะ _jarray {}; สาธารณะ _jarray {}; คลาส _jobjectarray: สาธารณะ _jarray {};คุณจะเห็นว่าคลาส _jobject ถูกกำหนดซึ่งเป็นคลาสที่ว่างเปล่าในขณะที่คลาสอื่น ๆ รวมถึง _jclass _jthrowable _jstring _jarray ล้วนได้รับการสืบทอดมาจากคลาส _jobject นอกจากนี้ประเภทอาร์เรย์ยังได้รับ 9 คลาสย่อยซึ่งสอดคล้องกับอาร์เรย์ประเภทฐานและอาร์เรย์ประเภทอ้างอิงตามลำดับ
หลังจากกำหนดคลาสแล้วให้กำหนดนามแฝงตัวชี้ นี่คือประเภทของวิธีการท้องถิ่น นอกจากนี้สิ่งเหล่านี้คือคำจำกัดความ C ++ หากเป็นคอมไพเลอร์ C มันจะใช้ struct เพื่อกำหนด _jobject ไม่ใช่คลาส
Typedef _jobject *Jobject; Typedef _jclass *Jclass; Typedef _jthrowable *jthrowable; Typedef _jstring *Jstring; Typedef _jarray *Jrray; Typedef _jbooleanarray *Jbooleanarray; *jchararray; typedef _jshortarray *jshortarray; typedef _jintarray *jintarray; typedef _jlongarray *jlongarray; typedef _jfloatarray *jfloatarray; typedef _jdoublearray
ประเภทอ้างอิงข้างต้นหมายถึงคลาสที่ว่างเปล่า ที่นี่เราเข้าใจคลาสที่ว่างเปล่าใน C ++ โดยปกติเราจำเป็นต้องกำหนดคลาสที่ว่างเปล่าในสองวิธีต่อไปนี้
คลาสว่างเปล่า {} struct ว่าง {}หลังจากคำจำกัดความข้างต้นขนาดของคลาสที่ว่างเปล่าคือ 1 แต่การใช้คลาสเปล่าถ้าไม่มีอะไร? ในความเป็นจริงมันสามารถใช้เพื่อแยกความแตกต่างของวัตถุที่แตกต่างกัน วัตถุที่แตกต่างกันที่กำหนดโดยคลาสที่ว่างเปล่ามีที่อยู่ที่แตกต่างกัน วัตถุที่ดำเนินการโดยใช้ใหม่ยังมีพอยน์เตอร์ที่แตกต่างกัน นอกจากนี้คลาสที่ว่างเปล่ายังสามารถแยกแยะหมวดหมู่ที่แตกต่างกันได้
แล้วเราจะใช้การแมปประเภทเหล่านี้ในการเชื่อมต่อได้อย่างไร? มันง่ายมาก คำตอบคือการแปลงพอยน์เตอร์ ดังที่ได้กล่าวไว้ก่อนหน้านี้วัตถุในเลเยอร์ Java มีโครงสร้างข้อมูลบางอย่างใน JVM นั่นคือใช้ OOP เพื่อเป็นตัวแทนของพอยน์เตอร์วัตถุ จากนั้นงานสามารถแปลงได้ดังต่อไปนี้โดยที่มือจับคือประเภทงาน
oop result = *reinterpret_cast <oop *> (ด้ามจับ);
มันสะดวกมากที่จะดำเนินการต่อไปหลังจากแปลงเป็น OOP ตัวอย่างเช่นหากคุณต้องการได้รับข้อมูลเมตาที่เกี่ยวข้องกับชั้นเรียนคุณสามารถใช้ KLASS เพื่อรับได้
ด้านบนประเภทที่กำหนดโดยเลเยอร์ Java มีชนิดข้อมูลที่สอดคล้องกันในวิธีการท้องถิ่น ยิ่งไปกว่านั้นซอร์สโค้ดเลเยอร์ Java จะถูกรวบรวมลงใน bytecode และบันทึกประเภทที่สอดคล้องกับพารามิเตอร์วิธีการท้องถิ่น เมื่อดำเนินการ JVM ประเภทที่สอดคล้องกับวิธีการท้องถิ่นสามารถแปลงตามประเภทต่าง ๆ ประเภทที่กำหนดโดยวิธีการในท้องถิ่นคือคลาสที่ว่างเปล่าทั้งหมด ฟังก์ชั่นหลักคือการผูกวัตถุและแยกแยะประเภทวัตถุ ข้อมูลเมตาของวัตถุหรือคลาสสามารถเข้าถึงได้ผ่านการแปลงตัวชี้เมื่อจำเป็น