Constructor คล้ายเมธอด เรียกตอนสร้างอ็อบเจกต์ ใช้ initialize instance variables ชื่อตรงคลาส ไม่มี return type
มี 2 ประเภท: Parameterized Constructors และ No-arg Constructors
Parameterized Constructor
รับพารามิเตอร์มา initialize instance variables สร้างอ็อบเจกต์ด้วยค่าที่ต่างกันได้
Syntax
public class Sample {
int i;
public Sample(int i) {
this.i = i;
}
}
ตัวอย่างที่ 1: พื้นฐาน
public class Test {
String val;
Test(String val) {
this.val = val;
}
public static void main(String args[]) {
Test obj = new Test("test");
System.out.println(obj.val);
}
}
Output
test
ตัวอย่างที่ 2: หลายพารามิเตอร์ + Scanner
import java.util.Scanner;
public class Test {
int num;
String data;
float flt;
Test(int num, String data, float flt) {
this.num = num;
this.data = data;
this.flt = flt;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter an integer value: ");
int num = sc.nextInt();
System.out.println("Enter a string value: ");
String data = sc.next();
System.out.println("Enter a floating point value: ");
float flt = sc.nextFloat();
Test obj = new Test(num, data, flt);
System.out.println(obj.num);
System.out.println(obj.data);
System.out.println(obj.flt);
}
}
Output
Enter an integer value: 1024 Enter a string value: test Enter a floating point value: 11.2 1024 test 11.2
Constructor Overloading
สร้าง Constructor หลายตัวในคลาสเดียวกัน ต่างกันที่พารามิเตอร์
public class Example {
private int id;
private String name;
// 1. Default
public Example() { this(0, "Unknown"); }
// 2. Parameterized - id only
public Example(int id) { this(id, "Unknown"); }
// 3. Parameterized - name only
public Example(String name) { this(0, name); }
// 4. Parameterized - both (Primary)
public Example(int id, String name) {
this.id = id;
this.name = name;
}
}
Best Practices
- ใช้
this()chain ไปยัง constructor "หลัก" ที่มีพารามิเตอร์ครบ - Validate input ใน constructor (throw IllegalArgumentException)
- ทำ fields เป็น final ได้ หาก immutable object
- หลีกเลี่ยง logic ซับซ้อนใน constructor - ใช้ Factory Method แทน