การสร้างและจัดเก็บ Object
แนะนำใหม่| English | ความหมาย |
|---|---|
| constructor/kənˈstrʌktə/ | ตัวสร้าง |
| instantiation/ˌɪnstænʃɪˈeɪʃn/ | การสร้างออบเจกต์ |
การสร้างออบเจ็กต์ใหม่
- ในการสร้างออบเจ็กต์ ให้ใช้คีย์เวิร์ด
newและ constructor Scanner sc = new Scanner(System.in);สร้าง Scanner object ใหม่- Instantiation คือการกระทำในการสร้างออบเจ็กต์จากคลาส
- Constructor ช่วยตั้งค่าสถานะเริ่มต้นของออบเจ็กต์
อาร์กิวเมนต์ของ Constructor
- Constructor สามารถรับ arguments เพื่อตั้งค่าค่าต่างๆ ให้กับออบเจ็กต์ใหม่
new Random(42)ตั้งค่า seeds สำหรับ random generator;new String("hi")คัดลอกข้อความ- อาร์กิวเมนต์ตรงกับ parameters ของ constructor โดยตำแหน่งและชนิดข้อมูล
- Constructor ที่แตกต่างกัน (overloaded) ช่วยให้สร้างคลาสเดียวกันในรูปแบบต่างๆกันได้
การเก็บ reference ไว้ในตัวแปร
newคืนค่า reference ไปยังออบเจ็กต์; เก็บไว้ในตัวแปรที่มีชนิดข้อมูลที่ถูกต้องScanner sc = new Scanner(System.in);—scตอนนี้ชี้ไปยังออบเจ็กต์นั้น- ออบเจ็กต์อาศัยอยู่ในหน่วยความจำ;
scเป็นเพียงป้ายชื่อที่ชี้ไปที่มันเท่านั้น - หากสูญเสีย reference (ไม่มีตัวแปรใดเก็บไว้) ออบเจ็กต์จะไม่สามารถเข้าถึงได้อีกต่อไป
ตัวแปรสองตัว ออบเจ็กต์หนึ่ง
- การกำหนดค่าตัวแปรของออบเจกต์หนึ่งให้กับอีกตัวแปรหนึ่ง เป็นการคัดลอกการอ้างอิง ไม่ใช่คัดลอกออบเจกต์
Scanner sc2 = sc;— ตอนนี้scและsc2ชี้ไปยัง Scanner ตัวเดียวกัน- การเปลี่ยนแปลงผ่าน
sc2จะปรากฏผ่านsc— เพราะเป็นออบเจกต์เดียวกัน - พฤติกรรมการคัดลอกการอ้างอิงนี้เป็นคุณลักษณะสำคัญ (และกับดัก) ของออบเจกต์
new สร้างออบเจกต์เพียง ONE และส่งคืนการอ้างอิงไปยังออบเจกต์นั้น การกำหนดตัวแปรนั้นให้กับอีกตัวแปรหนึ่ง (b = a;) เป็นการคัดลอก การอ้างอิง ดังนั้นทั้งสองชื่อจึงชี้ไปยัง ออบเจกต์เดียวกัน — ไม่ใช่การคัดลอกครั้งที่สอง ขัดแย้งกับ primitive (int y = x; คัดลอกค่า) การลืมสิ่งนี้นำไปสู่ความประหลาดใจว่า "ฉันเปลี่ยน b แล้วทำไม a ก็เปลี่ยนตาม?"
การสร้างออบเจกต์และการสร้างชื่อเรียกแทน:
Random r = new Random();→rชี้ไปยังออบเจกต์ Random ใหม่Random r2 = r;→r2ชี้ไปยัง ออบเจกต์เดียวกัน (ไม่มีการสร้างออบเจกต์ใหม่)- ทั้ง
rและr2ปัจจุบันแบ่งปันสถานะของเครื่องกำเนิดข้อมูลตัวเดียว
สร้างออบเจกต์ด้วย new พร้อม constructor (instantiation): new Scanner(System.in). new ส่งคืน การอ้างอิง ที่คุณเก็บไว้ในตัวแปร การกำหนดตัวแปรออบเจกต์หนึ่งให้กับอีกตัวแปรหนึ่ง เป็นการคัดลอกการอ้างอิง — จากนั้นทั้งคู่จะชี้ไปยัง ออบเจกต์เดียวกัน (ต่างจาก primitive ที่คัดลอกค่า)
new สร้าง object หนึ่งตัว; = คัดลอกการอ้างอิง
r และ r2 แบ่งปัน object เดียวกัน; x และ y เป็นสำเนาที่เป็นอิสระ
คีย์เวิร์ดใดสร้าง Object ใหม่?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
new พร้อม constructor จะ instantiate object
เมทόδพิเศษที่ถูกเรียกเพื่อสร้าง object ใหม่เรียกว่า ___ (หนึ่งคำ)
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Constructor ตั้งค่าเริ่มต้นให้กับ object ใหม่
หลังจาก Random r2 = r; จะมี Random objects อยู่กี่ตัว?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การ assign คัดลอกการอ้างอิง ไม่ใช่ object — ยังเหลือ object เดียว
การ assign ตัวแปร object หนึ่งไปยังอีกตัวหนึ่ง (b = a) ทำให้เกิด object ใหม่ที่เป็นอิสระ
Difficulty 1/5 · 100 coins + a small bonus on first completion today
มันคัดลอกการอ้างอิง — ทั้งสองชี้ไปที่ object เดียวกัน
สำหรับ primitives, int y = x; คัดลอกค่า ดังนั้น x และ y จึงเป็นอิสระ
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Primitives คัดลอกค่า; Objects คัดลอกการอ้างอิง