3.8.4. משתני התייחסות
כדי לייצור אובייקט חדש ממחלקה יש לבצע instantiation
מאותה מחלקה, כלומר לציין במפורש שאנו רוצים ליצור אובייקט חדש, וזאת על ידי המילה
new.
לאחר יצירתו של instance חדש ממחלקה ניתן לאחסן את
כתובתו (ה-reference שלו) במשתנה מטיפוס אותה מחלקה. מספר משתני
התייחסות יכולים להצביע אל אותו אובייקט.
ב-Java כמעט כל המשתנים הם משתנים
מסוג התייחסות. כאשר אנו מעבירים מחלקה לפונקציה, מועברת תמיד התייחסות אל המחלקה,
ולא עותק שלה. רק המשתנים הבסיסיים (int, char וכדו') מועברים לפי ערך.
הדרך ליצירתו של משתנה מטיפוס מחלקה זהה
לדרך ליצירת משתנה מטיפוס בסיסי.
יש לרשום את שם המחלקה שמטיפוסה רוצים
לייצור את המשתנה, ואחריו את שם המשתנה שרוצים לייצור. לדוגמא:
בדוגמא זו נוצר משתנה מטיפוס המחלקה Box.
במשתנה שהוא מטיפוס מחלקה מסוימת ניתן
לאחסן reference של אובייקט מטיפוס המחלקה שמטיפוסה נוצר המשתנה (ניתן גם לאחסן reference
לאובייקט מטיפוס מחלקה שיורשת מהמחלקה שמטיפוסה נוצר המשתנה).
יש לשים לב להבדל לעומת C++: ב-C++
משתנה מטיפוס מחלקה היווה כבר אובייקט בפני עצמו.
ב-Java הוא איננו אובייקט. הוא רק
מכיל reference של אובייקט.
ניתן בשורת ההצהרה על המשתנה לשלב גם את
יצירתו של אובייקט והכנסת כתובתו אל תוך המשתנה.
לדוגמא:
משתנה מטיפוס מחלקה יכול להכיל reference
לאובייקט או null.
נדגיש את ההבדל שבין משתנה מטיפוס
מחלקתי למשתנה מטיפוס בסיסי. בעוד שהאחרון מכיל ערך, הראשון מכיל את ה-reference
לערך. אלה הם שני סוגי המשתנים שקיימים ב-Java.
ניתן לבצע השמה ממשתנה מטיפוס Class-Type
אחד אל משתנה אחר מטיפוס אותו Class-Type. במקרה כזה, מה שיוכנס אל תוך
המשתנה האחר הוא הכתובת שאוחסנה בראשון, ובדרך זו שניהם יצביעו למעשה על אותו
אובייקט. לדוגמא:
Car familyCar,
sportCar;
familyCar = new
Car();
sportCar =
familyCar;
לאחר פקודות אלה המשתנים familyCar
ו- sportCar יכילו את אותו reference. כלומר, שינויים שיבוצעו
באובייקט ש- familyCar מכיל את ה-reference שלו, יבואו לידי ביטוי גם
באובייקט
ש-sportCar מכיל את ה-reference שלו כיוון שמדובר, למעשה, באותו reference.
xss hack
אני רוצה שתעזור לי ב xss אשמח לתשובה