คอนสตรัคเตอร์
แนะนำใหม่| English | ความหมาย |
|---|---|
| default constructor/dɪˈfɒlt kənˈstrʌktə/ | คอนสตรัคเตอร์เริ่มต้น |
Constructor ที่มีพารามิเตอร์ไม่ได้มี no-arg constructor ให้ด้วย
- Student ประกาศเพียง Student(String n) การสร้าง new Student("Ada") ทำงานได้ แต่ new Student() ไม่มี constructor ที่ตรงกัน
- Java จะจัด implicit default constructor ให้ก็ต่อเมื่อไม่ได้ประกาศ constructor ใดๆ ไว้ หากต้องการรองรับทั้งการเรียกใช้ทั้งสองแบบ ให้เขียน Student() และ Student(String n) อย่างชัดเจน
การตั้งค่าออบเจกต์ใหม่
- constructor ทำงาน เมื่อมีการสร้าง object ด้วย
newเพื่อตั้งค่าเริ่มต้น它有 ชื่อเดียวกับ class และ ไม่มี return type (แม้แต่voidก็ไม่) public Student(String n) { name = n; score = 0; }หน้าที่ของมัน: ให้ค่าเริ่มต้นที่เหมาะสมแก่ object ใหม่ก่อก่อ
พารามิเตอร์ของคอนสตรัคเตอร์
- Parameters ทำให้แต่ละ object ใหม่เริ่มด้วยค่าของตัวเอง
new Student("Ada")ส่ง"Ada"เข้าไปในnparameter ของ constructor - ภายใน,
name = n;คัดลอก argument เข้าไปใน instance variable Each successfulnewexpression สร้าง object ที่แตกต่างกันแม้ว่า arguments ของมันจะเหมือนกัน Arguments ที่ต่างกันอาจไม่จำเป็นต้องให้ค่า fields ที่แตกต่างกันหาก constructor ไม่สนใจหรือทำให้เป็นมาตรฐาน
การเรียก new Student("Ada") สองครั้งชี้ไปยังออบเจกต์เดียวกันเพราะอาร์กิวเมนต์มีค่าเท่ากัน
Difficulty 1/5 · 100 coins + a small bonus on first completion today
แต่ละนิพจน์ new ที่สำเร็จจะสร้างออบเจกต์ที่แตกต่างกัน; อาร์กิวเมนต์ที่มีค่าเท่ากันไม่ได้ทำให้การอ้างอิงเท่ากัน
การโอเวอร์โหลดคอนสตรัคเตอร์
- Class สามารถมี constructors หลายตัวที่มี parameter lists ที่แตกต่างกัน — overloading.
Student(String n)และStudent(String n, int s)เป็นไปได้ทั้งคู่ - Java เลือกตัว whose parameters ตรงกับ
newarguments ของคุณสิ่งนี้มอบวิธีการที่ยืดหยุ่นให้กับ callers ในการสร้าง object
คอนสตรัคเตอร์กำหนดสถานะเริ่มต้น
วัตถุใหม่แต่ละตัวถูกกำหนดค่าโดยพารามิเตอร์ของคอนสตรัคเตอร์
คอนสตรัคเตอร์มี...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ชื่อเดียวกับคลาส ไม่มี return type — แม้แต่ void ก็ไม่มี
คอนสตรัคเตอร์ทำงานเมื่อไหร่?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
new จะเรียกคอนสตรัคเตอร์เพื่อสร้างวัตถุ
หากคุณไม่เขียนคอนสตรัคเตอร์ Java จะจัดเตรียมคอนสตรัคเตอร์ default ที่ไม่มีพารามิเตอร์ให้
Difficulty 1/5 · 100 coins + a small bonus on first completion today
แต่การเขียนคอนสตรัคเตอร์ใดๆ จะลบ free default นั้นออกไป
เมื่อคุณนิยามคอนสตรัคเตอร์ที่มีพารามิเตอร์แล้ว new Student() ยังคงทำงานอัตโนมัติ
Difficulty 1/5 · 100 coins + a small bonus on first completion today
free default หายไปแล้ว; ให้เขียน no-arg constructor ถ้าจำเป็นต้องใช้
การเขียนคอนสตรัคเตอร์สองตัวที่มีรายการพารามิเตอร์ต่างกันเป็นตัวอย่างของ...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ชื่อเดียวกัน พารามิเตอร์ต่างกัน = การโอเวอร์โหลด (overloading)
คอนสตรัคเตอร์ค่าเริ่มต้น
- หากคุณไม่เขียน constructor ใดๆ Java จะจัด hidden default constructor ที่มี no parameters ให้ Fields จะมีค่าเริ่มต้นก่อน (
0,false,null); แล้วจึงสามารถตั้งค่าเริ่มต้นอื่นๆ ได้โดย explicit field initialisers - แต่ทันทีที่คุณเขียน constructor ใดๆ default free นั้นจะหายไป ดังนั้นหากคุณต้องการ no-arg constructor และ parameterized one ให้เขียนทั้งสองอย่าง
คอนสตรัคเตอร์มีชื่อเดียวกับคลาสและไม่มีชนิดการคืนค่า — การเขียน 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 มีตัวแปร int value = 7 เป็น private และมี constructor ที่ระบุชัดเจนซึ่ง subsequently assigning value = 9;. ค่าของ value ทันทีหลังการสร้างคือเท่าไร?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ตัวกำหนดค่าฟิลด์ (field initializer) asign 7 ก่อนที่ body ของ constructor จะ assign 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; }กับ class ที่เหมือนกันทุกประการซึ่งมี explicit constructor กำหนดvalue = 9;ตัวแรกเริ่มที่ 7 หลัง field initializer ของมัน; ตัวที่สองจบ construction ที่ 9 - Fields รับค่าเริ่มต้นก่อนที่ field initializers และ body ของ constructor จะทำงาน No-argument constructor ที่เขียนโดยโปรแกรมเมอร์ไม่ใช่ default constructor ที่จัดโดย compiler แม้ว่าจะมี no arguments เหมือนกัน
คอนสตรัคเตอร์ (ชื่อเดียวกับคลาส, ไม่มีชนิดการคืนค่า) ทำงานบน new เพื่อตั้งสถานะเริ่มต้นของออบเจกต์, ใช้ พารามิเตอร์ สำหรับค่าต่อออบเจกต์ คลัสสามารถ โอเวอร์โหลด คอนสตรัคเตอร์หลายตัว เขียน ไม่มี คอนสตรัคเตอร์และ Java จะจัดให้ ค่าเริ่มต้น แบบไม่มีพารามิเตอร์ — แต่การกำหนดคอนสตรัคเตอร์ใดก็ตามจะกำจัดค่าเริ่มต้นฟรีนี้