בונים
הוצג| English | משמעות |
|---|---|
| default constructor/dɪˈfɒlt kənˈstrʌktə/ | בונה ברירת מחדל |
קונסטרוקטור עם פרמטר אינו מספק קונסטרוקטור ללא פרמטר
- Student מציהר רק Student(String n). יצירת new Student("Ada") עובדת, אך new Student() אין לה קונסטרוקטור תואם.
- Java מספקת קונסטרוקטור ברירת מחדל סמוי רק כאשר אינו מוגדר. כדי לאפשר את שתי הקריאות, יש לכתוב במפורש Student() ו-Student(String n).
הגדרת אובייקט חדש
- קונסטרוקטור פועל כאשר אובייקט נוצר עם
new, כדי לקבוע את מצבו ההתחלתי. יש לו את שם אותו הקלאס ואין לו סוג החזרה (גם לאvoid). public Student(String n) { name = n; score = 0; }המשימה שלו: לתת לאובייקט החדש ערכי התחלה הגיוניים.
פרמטרים לבונה
- פרמטרים מאפשרים לכל אובייקט חדש להתחיל עם ערכים משלו.
new Student("Ada")מעביר"Ada"לפרמטרnשל הקונסטרוקטור. - בתוך זה,
name = n;מעתיק את הארגומנט למשתנה האובייקט. כל ביטויnewמוצלח יוצר אובייקט נפרד, גם כשהארגומנטים זהים. ארגומנטים שונים אינם חייבים לייצר ערכי שדה שונים אם הקונסטרוקטור מתעלם מהם או מנרמל אותם.
שני ביצועים של new Student("Ada") מתייחסים לאותו אובייקט כי הארגומנטים שווים.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
כל הבערת new מוצלחת בונה אובייקט נפרד; ארגומנטים שווים אינם הופכים את ההפניות לשוות.
העמסת בונים
- לקלאס יכולים להיות מספר קונסטרוקטורים עם רשימות פרמטרים שונות — עימול.
Student(String n)ו-Student(String n, int s)שניהם תקפים. - Java בוחר את זו שבה הפרמטרים תואמים את ה
newשלכם. זה מציע לקוראים דרכים גמישות לבנות אובייקט.
בונים קובעים את מצב ההתחלה
כל אובייקט חדש מוגדר על ידי פרמטרי הבונה.
לבונה יש...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אותו שם כמו הקלאס, ללא סוג החזרה — גם לא void.
מתי מתבצע בונה?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
new קורא לבונה כדי לבנות את האובייקט.
אם לא כתבת בונה כלל, Java מספקת בונה ברירת מחדל ללא פרמטרים.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אך כתיבת כל בונה מבטלת את ברירת המחדל הזו.
ברגע שהגדרת בונה עם פרמטרים, new Student() עדיין עובד אוטומטית.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הברירת המחדל החינמית נעלמה; כתוב בונה ללא פרמטרים אם תצטרך אותו.
כתיבת שני בונים עם רשימות פרמטרים שונות היא דוגמה ל...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אותו שם, פרמטרים שונים = העמסה חוזרת.
הבונה המובל
- אם אינך כותב אף קונסטרוקטור, Java מספקת קונסטרוקטור ברירת מחדל נסתר ללא פרמטרים. שדות מקבלים תחילה ערכי ברירת מחדל (
0,false,null); ניתן לאחר מכן להגדיר באינפיליצ'רים שדה אחרים ערכי התחלה. - אבל ברגע שכותבים כל קונסטרוקטור, ברירת המחדל החינמית הזו נעלמת. לכן אם אתה זקוק לקונסטרוקטור ללא פרמטר וגם לקונסטרוקטור עם פרמטר, כתוב את שניהם.
לבונה יש את שם המחלקה ואין לו סוג חזרה — כתיבת void הופכת אותו למטרה רגילה ולא לבונה. לאחר שאתה מגדיר כל בונה, Java מפסיקה לספק לך את ברירת המחדל החינם; אם עדיין תרצה new Student(), עליך לכתוב את הבונה הזה בעצמך.
Order the steps used to evaluate new Student("Ada").
Difficulty 3/5 · 200 coins + a small bonus on first completion today
The supplied argument selects a matching constructor; declaring it does not also create a no-argument constructor.
ל-Counter יש value פרטי מסוג int ששווה ל-7; ולקונסטרוקטור אקספליסיטי שמטיל עליו value = 9;. מה הערך של value מיד לאחר הבנייה?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
מאתח השדה מקצה 7 לפני שבוגר הבונה מקצה 9.
שני בונים עבור Student:
public Student(String n) { name = n; score = 0; }public Student(String n, int s) { name = n; score = s; }new Student("Ada")→ ציון0;new Student("Bo", 75)→ ציון75.
להעביר את הניתוח למקרה חדש
- השוו
class Counter { private int value = 7; }לקלאס זהה אחרת שמקונסטרוקטור מפורש ממנהvalue = 9;. הראשון מתחיל ב-7 לאחר האינפיליצ'ר השדה; השני מסתיים בבנייה ב-9. - שדות מקבלים ערכי ברירת מחדל לפני אינפיליצ'רים שדה וגוף הקונסטרוקטור פועלים. קונסטרוקטור ללא פרמטר שנכתב על ידי מתכנת אינו הקונסטרוקטור ברירת המחדל שהקומפיילר מספק, גם אם שניהם ללא פרמטרים.
בונה (אותו שם כמו המחלקה, ללא סוג חזרה) פועל על new כדי לקבוע את מצב ההתחלה של אובייקט, תוך שימוש ב-פרמטרים לערכים ספציפיים לכל אובייקט. מחלקה יכולה להעמיס מספר בונים. אל תכתוב בונה כלל והJava תספק בונה ברירת מחדל ללא ארגומנט — אך הגדרת כל בונה מבטלת את ברירת המחדל החינם הזו.