3.8.4. משתני התייחסות

כדי לייצור אובייקט חדש ממחלקה יש לבצע instantiation מאותה מחלקה, כלומר לציין במפורש שאנו רוצים ליצור אובייקט חדש, וזאת על ידי המילה new.

לאחר יצירתו של instance חדש ממחלקה ניתן לאחסן את כתובתו (ה-reference  שלו) במשתנה מטיפוס אותה מחלקה. מספר משתני התייחסות יכולים להצביע אל אותו אובייקט.

ב-Java כמעט כל המשתנים הם משתנים מסוג התייחסות. כאשר אנו מעבירים מחלקה לפונקציה, מועברת תמיד התייחסות אל המחלקה, ולא עותק שלה. רק המשתנים הבסיסיים (int, char וכדו') מועברים לפי ערך.

הדרך ליצירתו של משתנה מטיפוס מחלקה זהה לדרך ליצירת משתנה מטיפוס בסיסי.

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

Box myBox;

בדוגמא זו נוצר משתנה מטיפוס המחלקה Box.

במשתנה שהוא מטיפוס מחלקה מסוימת ניתן לאחסן reference של אובייקט מטיפוס המחלקה שמטיפוסה נוצר המשתנה (ניתן גם לאחסן reference לאובייקט מטיפוס מחלקה שיורשת מהמחלקה שמטיפוסה נוצר המשתנה).

יש לשים לב להבדל לעומת C++: ב-C++ משתנה מטיפוס מחלקה היווה כבר אובייקט בפני עצמו.

ב-Java הוא איננו אובייקט. הוא רק מכיל reference של אובייקט.

ניתן בשורת ההצהרה על המשתנה לשלב גם את יצירתו של אובייקט והכנסת כתובתו אל תוך המשתנה.

לדוגמא:

Box myBox = new Box();

משתנה מטיפוס מחלקה יכול להכיל reference לאובייקט או null.

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

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

Car familyCar, sportCar;

familyCar = new Car();

sportCar = familyCar;

לאחר פקודות אלה המשתנים familyCar ו- sportCar יכילו את אותו reference. כלומר, שינויים שיבוצעו באובייקט ש- familyCar מכיל את ה-reference שלו, יבואו לידי ביטוי גם באובייקט

ש-sportCar מכיל את ה-reference  שלו כיוון שמדובר, למעשה, באותו reference.



תגיות המסמך:

מאת: anonymos

xss hack

אני רוצה שתעזור לי ב xss אשמח לתשובה
מאת: BLT

תודה רבה!

וואי הצלת אותי! קיבלתי שאלה שלא הצלחתי להבין מה רוצים ממני בכלל ועזרת מאוד, תודה :)
מאת: דולב

מה זה פונקציה?
מאת: משה

עזרה

חיה רצית עזרה ואשמח לעזור
mmh15@windowslive.com
מאת: חיה

תיכנות

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

תחביר

למרות שג'אווה מאפשרת סגנון הכרזה על מערך דומה לזה שבC++, הסגנון המומלץ באופן רשמי שונה - הסוגריים המרובעים באים מיד לאחר הטיפוס ובסמוך אליו, לא בסמוך לשם המערך.
שיתוף:
| עוד