تحدد لغة Java أنواع البيانات المختلفة ، مثل الأنواع الأساسية int ، double ، وما إلى ذلك ، وكذلك كائن الفئة الأصل لجميع الفئات ، وما إلى ذلك.
يتم تجميع الأساليب الأصلية المكتوبة في طبقة Java في Bytecode بواسطة المترجم. سوف يسجل Bytecode أنواعًا مختلفة من المعلمات في ملفات الفصل وفقًا للمواصفات ، مثل B تمثل Byte ، ويمثل INT ، J ، J يمثل طويلًا ، وما إلى ذلك ، ثم يتم تسجيل طريقة محلية على النحو التالي (Ljava/Lang/Object ؛ ii) v.
اختبار الفراغ الأصلي العام (الكائن O ، int i ، int i2) ؛
يتم تسجيل الطرق المقابلة أعلاه في JVM. عند تنفيذها للاتصال بالطريقة المحلية ، سيتم تحويل نوع البيانات المحلية وفقًا لخريطة النوع ، مثل int-> Jint و Object-> Jobject. في الواقع ، int و jint متماثلان في C ++ ، ما عليك سوى استخدام typedef لتحديد اسم آخر. Jobject هو مؤشر. يقوم محرك التنفيذ بإنشاء كائن كائن عند تنفيذ منطق طبقة Java. لديها بنية بيانات خاصة في طبقة JVM. الوظيفة هنا مؤشر لهذا الهيكل. عندما تحتاج إلى استخدامه ، يمكن إلقاؤه في بنية بيانات طبقة JVM ، ثم يمكن تشغيلها. بالإضافة إلى ذلك ، يتم استخدام OOP في JVM لتمثيل مؤشرات الكائن.
| نوع جافا | النوع الأصلي | قيمة |
|---|---|---|
| منطقية | 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 | 16 بت غير موقعة ، أحرف يونيكود |
بالإضافة إلى تعيين النوع الأساسي ، فإن أنواع الكائنات الأخرى في طبقة Java هي أنواع مرجعية ، وبالتالي فإن الطريقة المحلية تتوافق مع نوع Jobject. بالإضافة إلى ذلك ، سوف يستمد أيضًا بعض الفئات الفرعية الشائعة الاستخدام ، مثل JSTRING ، JCLASS ، وما إلى ذلك ، على النحو التالي ،
class _jobject {} ؛ class _jclass: public _jobject {} ؛ class _jthrowable: public _jobject {} ؛ class _jstring: public _jobject {} ؛ class _jrray: public _jobject {} ؛ class _jboolean. _jarray {} ؛ class _jchararray: public _jarray {} ؛ class _jshortarray: public _jarray {} ؛ class _jintarray: public _jarray {} ؛ class _jlongarray: public _jarray {} ؛ class _jfloatarray: public ؛ _jdoublearray: public _jarray {} ؛ class _jobjectarray: public _jarray {} ؛يمكنك أن ترى أن فئة _jobject محددة ، وهي فئة فارغة ، في حين أن الفئات الأخرى تتضمن _jclass _jthrowable _jstring _jarray ، جميعها موروثة من فئة _jobject. بالإضافة إلى ذلك ، يستمد نوع المصفوفة أيضًا 9 فئات فرعية ، المقابلة لمصفوفة النوع الأساسي ومصفوعة نوع المرجع على التوالي.
بعد تحديد الفصل ، حدد اسم اسم الملقب. هنا هو نوع الطريقة المحلية. بالإضافة إلى ذلك ، هذه هي تعريفات C ++. إذا كان برنامج التحويل البرمجي C ، فسيستخدم الهيكل لتحديد _jobject ، وليس الفصل.
typedef _jobject *Jobject ؛ typedef _jclass *jClass ؛ typedef _jthrowable *jThrowable ؛ typedef _jstring *jString ؛ typedef _jarray *jrrray ؛ typedef _jbooleanarray *jbooleanray ؛ typedef _jbytearray *jchararray ؛ typedef _jshortarray *jShortArray ؛ typedef _jintarray *jintarray ؛ typedef _jlongarray *jlongarray ؛ typedef _jfloatarray *jfloatarray ؛ typedef _jdoublearray *jDoublearray ؛
يتم تعريف النوع المرجعي أعلاه على أنه فئة فارغة. هنا نفهم الفئة الفارغة في C ++. عادة ، نحتاج إلى تحديد فئة فارغة بالطريقتين التاليتين.
فئة فارغة {} بنية فارغة {}بعد التعريف أعلاه ، يكون حجم الفئة الفارغة 1 ، ولكن ما هو استخدام فئة فارغة إذا لم يكن هناك شيء؟ في الواقع ، يمكن استخدامه لتمييز الكائنات المختلفة. الكائنات المختلفة المحددة بواسطة الفئات الفارغة لها عناوين مختلفة. الكائنات التي يتم تشغيلها باستخدام جديد لها مؤشرات مختلفة. بالإضافة إلى ذلك ، يمكن للفصول الفارغة أيضًا التمييز بين الفئات المختلفة.
فكيف نستخدم تعيينات النوع هذه فيما يتعلق؟ إنه في الواقع بسيط للغاية. الجواب هو تحويل المؤشرات. كما ذكرنا سابقًا ، فإن الكائنات الموجودة في طبقة Java لديها بنية بيانات معينة في JVM ، أي استخدام OOP لتمثيل مؤشرات الكائن. ثم يمكن تحويل المهمة على النحو التالي ، حيث يكون المقبض هو نوع الوظيفة.
نتيجة OOP = *reinterpret_cast <OOP *> (Handle) ؛
من المريح للغاية معالجته بعد تحويله إلى OOP. على سبيل المثال ، إذا كنت ترغب في الحصول على بعض البيانات الوصفية ذات الصلة بالفصول ، فيمكنك استخدام KLASS للحصول عليها.
أعلاه ، الأنواع المحددة بواسطة طبقة Java لها أنواع البيانات المقابلة في الطريقة المحلية. علاوة على ذلك ، يتم تجميع رمز مصدر طبقة Java في Bytecode ويحفظ الأنواع المقابلة لمعلمات الطريقة المحلية. عند تنفيذ JVM ، يمكن تحويل النوع المقابل للطريقة المحلية وفقًا لأنواع مختلفة. الأنواع المحددة بالطريقة المحلية كلها فئات فارغة. الوظيفة الرئيسية هي ربط الكائنات وتمييز أنواع الكائنات. يمكن الوصول إلى البيانات الوصفية للكائن أو الفئة من خلال تحويل المؤشر عند الضرورة.