סוג החזרת קונסטרוקטור בג'אווה

1. סקירה כללית

במדריך מהיר זה, אנו נתמקד בסוג ההחזרה עבור קונסטרוקטור בג'אווה.

ראשית נכיר כיצד פעולות אתחול האובייקטים ב- Java וב- JVM. לאחר מכן, נעמיק יותר כדי לראות כיצד אתחול והקצאת אובייקטים עובדים מתחת למכסה המנוע.

2. אתחול מופע

נתחיל בשיעור ריק:

מחלקה ציבורית צבע {}

כאן ניצור מופע מהמחלקה הזו ונקצה אותו למשתנה כלשהו:

צבע צבע = צבע חדש ();

לאחר חיבור קטע Java פשוט זה, בואו נציץ בקוד התיקיה שלו דרך ה- javap -c פקודה:

0: חדש # 7 // מחלקה צבע 3: dup 4: invokespecial # 9 // צבע שיטה. "" :() V 7: astore_1

כאשר אנו מייצרים אובייקט ב- Java, ה- JVM מבצע את הפעולות הבאות:

  1. ראשית, הוא מוצא מקום במרחב התהליך שלו לאובייקט החדש.
  2. לאחר מכן, ה- JVM מבצע את תהליך אתחול המערכת. בשלב זה הוא יוצר את האובייקט במצב ברירת המחדל שלו. ה חָדָשׁ opcode ב- bytecode אחראי למעשה על שלב זה.
  3. לבסוף, הוא מאותחל את האובייקט עם הקונסטרוקטור וחסימות האתחול האחרות. במקרה זה, לא מיוחד opcode קורא לבנאי.

כפי שמוצג לעיל, חתימת השיטה לבנאי ברירת המחדל היא:

צבע שיטה. "" :() V

ה הוא השם של שיטות אתחול מופע ב- JVM. במקרה זה, היא פונקציה ש:

  • לא לוקח דבר כקלט (סוגריים ריקים אחרי שם השיטה)
  • לא מחזיר דבר (V. מייצג בָּטֵל)

לכן, סוג ההחזרה של קונסטרוקטור ב- Java ו- JVM הוא בָּטֵל.

מבט נוסף על המטלה הפשוטה שלנו:

צבע צבע = צבע חדש ();

עכשיו שאנחנו יודעים שהבנאי חוזר בָּטֵלבואו נראה איך המטלה עובדת.

3. איך עובד מטלה

JVM היא מכונה וירטואלית מבוססת מחסנית. כל מחסנית מורכבת ממסגרות מחסנית. במילים פשוטות, כל מסגרת מחסנית תואמת לשיחת שיטה. למעשה, JVM יוצר מסגרות עם שיחת שיטה חדשה ומשמיד אותן עם סיום תפקידן:

כל מסגרת מחסנית משתמשת במערך לאחסון משתנים מקומיים ובערימת אופרנד לאחסון תוצאות חלקיות. בהתחשב בכך, בואו נסתכל שוב על קוד הביצה:

0: חדש # 7 // מחלקה צבע 3: dup 4: invokespecial # 9 // צבע שיטה. "" :() V 7: astore_1

כך עובדת המטלה:

  • ה חָדָשׁ הוראה יוצרת מופע של צֶבַע ודוחף את הכוונה שלו לערמת האופרנד
  • ה dup opcode משכפל את הפריט האחרון בערמת האופרנד
  • ה לא מיוחד לוקח את ההפניה המשוכפלת וצורך אותה לאתחול. לאחר מכן, רק ההתייחסות המקורית נותרת בערמת האופרנד
  • ה astore_1 מאחסן את ההתייחסות המקורית לאינדקס 1 של מערך המשתנים המקומיים. הקידומת "a" פירושה שהפריט שיש לאחסן הוא הפניה לאובייקט, וה- "1" הוא אינדקס המערך

מעתה והלאה, הפריט השני (אינדקס 1) במערך המשתנים המקומיים הוא הפניה לאובייקט החדש שנוצר. לכן, אנו לא מאבדים את ההתייחסות, והמשימה עובדת למעשה - גם כאשר הקונסטרוקטור לא מחזיר דבר!

4. מסקנה

במדריך מהיר זה למדנו כיצד ה- JVM יוצר ומאתחל את המופעים הכיתיים שלנו. יתר על כן, ראינו כיצד אתחול המופע פועל מתחת למכסה המנוע.

להבנה מפורטת עוד יותר של ה- JVM, תמיד מומלץ לבדוק את המפרט שלו.


$config[zx-auto] not found$config[zx-overlay] not found