1. การสร้างวัตถุ
เรามาถึงการสร้างวัตถุแล้ว คุณเคยเจอสิ่งนี้มาก่อน แต่ตอนนี้เราจะวิเคราะห์หัวข้อนี้โดยละเอียดยิ่งขึ้น การสร้างวัตถุเป็นเรื่องง่ายมาก
ในการสร้างวัตถุ คุณต้องใช้ตัวดำเนินการใหม่ การสร้างวัตถุมีลักษณะดังนี้:
new Class(arguments)
หลังจากสร้างออบเจกต์แล้ว เรามักจะบันทึกการอ้างอิงไปยังออบเจกต์ทันทีในตัวแปร ซึ่งมักจะแชร์ประเภทเดียวกันกับออบเจ็กต์ที่สร้างขึ้น ซึ่งหมายความว่าเมื่อสร้างวัตถุ คุณจะเห็นโค้ดดังนี้:
Class name = new Class(arguments)
การสร้างตัวแปรใหม่ อยู่ที่ไหนและรหัสทางด้านขวาของเครื่องหมายเท่ากับคือการสร้างวัตถุใหม่ที่มีประเภทเป็น.Class name
Class
ตัวอย่าง:
รหัส | บันทึก |
---|---|
|
สร้างObject วัตถุ |
|
สร้างCat วัตถุ |
|
สร้างScanner วัตถุ |
โปรแกรมเมอร์มักจะตั้งชื่อตัวแปรตามคลาส แต่ใช้อักษรตัวพิมพ์เล็ก สำหรับโปรแกรมเมอร์มือใหม่ รหัสดังกล่าวอาจสร้างความสับสนได้:
รหัส |
---|
|
|
|
ไม่มีอะไรผิดปกติกับโค้ดนี้ — นี่เป็นโค้ดธรรมดาที่สุด ซึ่งตัวแปรจะถูกสร้างขึ้นและเริ่มต้นทันทีโดยอ็อบเจกต์ประเภทเดียวกัน
ทางด้านซ้ายของเครื่องหมายเท่ากับ เรามีการสร้างตัวแปร ทางด้านขวา การสร้างวัตถุ แค่นั้นแหละ.
2. ตัวสร้าง
คุณอาจเห็นว่ามีการส่งผ่านข้อโต้แย้งบางอย่างบ่อยครั้งเมื่อสร้างวัตถุ ยิ่งไปกว่านั้น ข้อโต้แย้งจะถูกส่งผ่านสำหรับวัตถุบางอย่าง แต่ไม่ใช่วัตถุอื่นๆ กลไกทั้งหมดนี้มีข้อโต้แย้งทำงานอย่างไร
ทุกอย่างก็ง่ายเช่นกัน: แต่ละคลาสมีเมธอดพิเศษ (หรือเมธอด) ที่รับผิดชอบในการจัดการอาร์กิวเมนต์ที่ส่งผ่านเมื่อสร้างออบเจกต์ เมธอดเหล่านี้เรียกว่าตัวสร้าง หรือเมื่อเราพูดถึงเพียงหนึ่งเดียว: ตัวสร้าง
การแยกแยะเมธอดคอนสตรัคเตอร์จากเมธอดปกตินั้นเป็นเรื่องง่าย วิธีนี้มีคุณสมบัติเด่นสองประการ:
- ชื่อของคอนสตรัคเตอร์จะเหมือนกับชื่อของคลาส (และขึ้นต้นด้วยอักษรตัวใหญ่)
- ตัวสร้างไม่มีประเภทการส่งคืน
โดยทั่วไปแล้วจะมีลักษณะดังนี้:
modifiers Class(arguments)
{
Code
}
ตัวอย่าง:
รหัส | บันทึก |
---|---|
|
Point Point ตัวสร้างคลาสคลาส |
|
สร้างวัตถุของ Point ชั้นเรียน ตัวสร้างคลาสจะถูกเรียก |
สังเกตว่าตัวสร้างมีลักษณะอย่างไร: ไม่มีประเภทส่งคืนและชื่อเหมือนกับชื่อคลาส
และอีกสิ่งหนึ่ง: ดูโค้ดภายในตัวสร้าง พารามิเตอร์ของตัวสร้างมีชื่อเดียวกันกับฟิลด์ของคลาส: x และ y เป็นแนวปฏิบัติมาตรฐานเพื่อหลีกเลี่ยงการตั้งชื่อพารามิเตอร์ใหม่ ชื่อจะเหมือนกับชื่อฟิลด์ของคลาส ความขัดแย้งของชื่อได้รับการแก้ไขโดยใช้คำหลักนี้
3. การเรียกตัวสร้าง
เมื่อใช้ ตัวดำเนินการ ใหม่และคำสั่งเช่น "new Class ( arguments )" เพื่อสร้างวัตถุใหม่ มีสองสิ่งเกิดขึ้น:
- เครื่อง Java สร้างวัตถุที่มีประเภทเป็นคลาส
- เครื่อง Java เรียกตัวสร้างของวัตถุและส่งผ่านอาร์กิวเมนต์ ของคุณ
ในฐานะโปรแกรมเมอร์ คุณจะต้องตัดสินใจว่าตัวสร้างคลาสของคุณควรมีตัวสร้างอะไรบ้าง และตัวสร้างเหล่านี้ควรมีพารามิเตอร์อะไรบ้าง
สมมติว่าคุณตัดสินใจสร้างชั้นเรียนเพื่อติดตามแมวที่ศูนย์พักพิงสัตว์ จากนั้นCat
ชั้นเรียนของคุณอาจมีลักษณะดังนี้:
|
|
|
สิ่งนี้ได้รับอนุญาต |
|
แต่ไม่อนุญาต รหัสนี้จะไม่รวบรวม |
|
และสิ่งนี้ไม่ได้รับอนุญาต รหัสนี้จะไม่รวบรวม |
คลาสCat
มีคอนสตรัคเตอร์เพียงตัวเดียวที่มีพารามิเตอร์ชื่อและอายุ เนื่องจากไม่มีตัวสร้างอื่น คุณต้องส่งชื่อแมว ( name
) และอายุ ( age
) เป็นอาร์กิวเมนต์เมื่อสร้างวัตถุ การส่งอาร์กิวเมนต์ไปยังตัวสร้างไม่ใช่ตัวเลือก
4. ตัวสร้างหลายตัว
แต่ถ้าคุณต้องการ คุณสามารถเพิ่มตัวสร้างหลายตัวในคลาสได้ ไม่มีการจำกัดจำนวนของตัวสร้างหรือพารามิเตอร์ เมื่อคุณสร้างวัตถุ คอมไพลเลอร์จะเลือกตัวสร้างที่ตรงกับพารามิเตอร์โดยอัตโนมัติ
รหัส | บันทึก |
---|---|
|
|
|
สิ่งนี้ได้รับอนุญาต: คอนสตรัคเตอร์แรกจะถูกเรียก |
|
สิ่งนี้ได้รับอนุญาต: ตัวสร้างที่สองจะถูกเรียก |
|
แต่ไม่อนุญาต รหัสนี้จะไม่รวบรวม |
เราตัดสินใจที่จะคำนึงถึงข้อเท็จจริงที่ว่าอายุของแมวนั้นไม่อาจทราบได้ ในการจัดการกับกรณีนี้ เราได้เพิ่มค่าคงที่พิเศษUNKNOWN
พร้อมกับตัวสร้างที่มีพารามิเตอร์เพียงตัวเดียว นั่นคือชื่อของแมว
โปรดทราบว่าเรายังคงเริ่มต้นตัวแปรทั้งสองภายในตัวสร้างทั้งสอง เราแทนที่พารามิเตอร์ที่ไม่รู้จัก/ขาดหายไปด้วยค่าคงUNKNOWN
ที่
หากไม่มีการกำหนดค่าให้กับตัวแปรอายุ ค่านั้นจะมีค่าเริ่มต้นเป็น 0 อย่างไรก็ตาม ลูกแมวที่พบข้างถนนอาจมีอายุ 0 ปีเต็ม นั่นหมายความว่าเลขศูนย์ในตัวแปรอายุไม่ได้หมายความว่า "ไม่ทราบอายุ"
5. ตัวสร้างเริ่มต้น
หากคุณต้องการให้สร้างอินสแตนซ์ของออบเจกต์โดยไม่มีพารามิเตอร์ใดๆ คลาสของคุณต้องประกาศตัวสร้างที่ไม่มีข้อโต้แย้ง
ตัวสร้างที่ไม่มีพารามิเตอร์ไม่จำเป็นต้องเป็นตัวสร้างที่ไม่มีรหัส ตัวสร้างดังกล่าวสามารถมีรหัสที่เริ่มต้นตัวแปรด้วยค่าเริ่มต้น:
รหัส | บันทึก |
---|---|
|
|
|
สิ่งนี้ได้รับอนุญาต: คอนสตรัคเตอร์แรกจะถูกเรียก |
|
สิ่งนี้ได้รับอนุญาต: ตัวสร้างที่สองจะถูกเรียก |
ตัวสร้างเริ่มต้น
มีจุดสำคัญมากที่คุณควรรู้และจดจำ
ถ้าคลาสของคุณไม่ได้ประกาศตัวสร้างหนึ่งตัว คอมไพเลอร์จะเพิ่มตัวสร้างเริ่มต้น ซึ่งเป็นตัวสร้างที่ไม่มีข้อโต้แย้งพร้อมกับตัวแก้ไขสาธารณะ
แต่ถ้าคลาสของคุณประกาศตัวสร้างแม้แต่ตัวเดียวก็จะไม่มีตัวสร้างเริ่มต้นเพิ่มเข้ามาและคุณจะต้องเพิ่มมันเองหากต้องการ
รหัส | บันทึก |
---|---|
|
|
|
สิ่งนี้ได้รับอนุญาต: คอนสตรัคเตอร์เริ่มต้นจะถูกเรียก |
GO TO FULL VERSION