ใน Java เมธอดใช้เก็บบล็อกโค้ดที่ทำหน้าที่เฉพาะเจาะจง เมื่อทำงานกับเมธอด จะพบแนวคิด constructors (คอนสตรักเตอร์)
คอนสตรักเตอร์คือเมธอดพิเศษใช้สำหรับ เริ่มต้นออบเจ็กต์ (initialize objects) ใน Java ถูกเรียกเมื่อสร้างออบเจ็กต์ของคลาส ใช้ตั้งค่าเริ่มต้น (initial values) ให้ออบเจ็กต์
บทช่วยสอนนี้อธิบายพื้นฐานคอนสตรักเตอร์ Java และวิธีใช้งาน พร้อมตัวอย่าง จบบทแล้วคุณจะใช้คอนสตรักเตอร์อย่างมืออาชีพ
คอนสตรักเตอร์ใน Java
คอนสตรักเตอร์เริ่มต้นออบเจ็กต์ที่เพิ่งสร้าง ก่อนนำไปใช้ เช่น คอนสตรักเตอร์ Supplier จะสร้างออบเจ็กต์พร้อมคุณสมบัติเริ่มต้นของผู้จัดจำหน่าย
คอนสตรักเตอร์มีชื่อเดียวกับคลาส และ ไม่คืนค่า (no return type) ตัวอย่าง:
class Supplier {
Supplier() {
// Code here
}
}
คอนสตรักเตอร์ Supplier ชื่อเดียวกับคลาส ไม่มี return type (void) - จุดแตกต่างจากเมธอดทั่วไป
กฎ 2 ข้อตอนประกาศคอนสตรักเตอร์:
- ชื่อคอนสตรักเตอร์ต้องตรงกับชื่อคลาสทุกประการ
- คอนสตรักเตอร์ไม่สามารถคืนค่าได้
วิธีสร้างคอนสตรักเตอร์ใน Java
มี 2 ประเภท: no-arg constructors (ไม่มีพารามิเตอร์) และ parameterized constructors (มีพารามิเตอร์)
No-arg Constructors
สมมติร้านขายของชำ ต้องการโปรแกรมเก็บข้อมูลผู้จัดจำหน่ายชีสหลัก มีคอนสตรักเตอร์เก็บข้อมูล และพิมพ์ค่าออกมา
class MainCheeseSupplier {
private String name;
private String address;
private int discountRate;
private String payDate;
private MainCheeseSupplier() {
name = "J. Acker Dairy";
address = "1600 Johnson Ave. San Francisco 94127";
discountRate = 2;
payDate = "Last day of the month.";
}
public static void main(String[] args) {
MainCheeseSupplier jadairy = new MainCheeseSupplier();
System.out.println("Name: " + jadairy.name);
System.out.println("Address: " + jadairy.address);
System.out.println("Discount rate: " + jadairy.discountRate);
System.out.println("Pay date: " + jadairy.payDate);
}
}
ผลลัพธ์:
Name: J. Acker Dairy Address: 1600 Johnson Ave. San Francisco 94127 Discount rate: 2 Pay date: Last day of the month.
อธิบาย: คลาส MainCheeseSupplier มีตัวแปร private 4 ตัว คอนสตรักเตอร์ MainCheeseSupplier() ตั้งค่าเริ่มต้น ใน main สร้างอินสแตนซ์ jadairy แล้วพิมพ์แต่ละค่า เรียกว่า no-arg constructor เพราะไม่รับพารามิเตอร์
Parameterized Constructor
กรณีต้องการส่งอาร์กิวเมนต์ผ่านคอนสตรักเตอร์ เรียกว่า parameterized constructor
กลับไปร้านขายของชำ: ต้องการกำหนดค่าผู้จัดจำหน่ายใน main program แล้วส่งให้คอนสตรักเตอร์ตอนเริ่มรัน อาจเพราะมีหลายผู้จัดจำหน่ายค่าต่างกัน หรือไม่อยาก hardcode ค่าในคอนสตรักเตอร์
class MainCheeseSupplier {
String name;
String address;
int discountRate;
String payDate;
public MainCheeseSupplier(String supplierName, String supplierAddress, int supplierDiscountRate, String supplierPayDate) {
name = supplierName;
address = supplierAddress;
discountRate = supplierDiscountRate;
payDate = supplierPayDate;
}
public static void main(String[] args) {
MainCheeseSupplier jadairy = new MainCheeseSupplier("J. Acker Dairy", "1600 Johnson Ave. San Francisco 94127", 2, "Last day of the month.");
System.out.println("Name: " + jadairy.name);
System.out.println("Address: " + jadairy.address);
System.out.println("Discount rate: " + jadairy.discountRate);
System.out.println("Pay date: " + jadairy.payDate);
}
}
ผลลัพธ์เหมือนเดิม แต่ต่างตรงที่: ค่าไม่ได้ตั้งในคอนสตรักเตอร์ แต่ส่งผ่านพารามิเตอร์ตอนสร้างอินสแตนซ์
คอนสตรักเตอร์รับ 4 พารามิเตอร์: supplierName, supplierAddress, supplierDiscountRate, supplierPayDate ตอน new MainCheeseSupplier(...) ส่งค่าเข้าไป คอนสตรักเตอร์อ่านค่าและกำหนดให้ตัวแปร instance
สรุป
คอนสตรักเตอร์ Java เป็นเมธอดพิเศษเริ่มต้นออบเจ็กต์ เรียกเมื่อสร้างออบเจ็กต์ของคลาส ใช้ตั้งค่าเริ่มต้นแอตทริบิวต์ บทช่วยสอนนี้อธิบายการสร้างและใช้งานทั้ง no-arg และ parameterized constructors ตอนนี้คุณพร้อมใช้คอนสตรักเตอร์ Java อย่างมืออาชีพแล้ว!