Constructor
1. Constructor là gì?
Phần tiêu đề “1. Constructor là gì?”Constructor (hàm khởi tạo) là một phương thức đặc biệt, tự động được gọi khi dùng new để tạo một đối tượng - dùng để khởi tạo trạng thái ban đầu cho đối tượng đó:
public class Dog { String name; int age;
// Constructor: cùng tên với class, KHÔNG có kiểu trả về (kể cả void) public Dog(String name, int age) { this.name = name; this.age = age; }}Dog dog = new Dog("Lucky", 2); // gọi constructor, truyền đối sốSystem.out.println(dog.name); // LuckySystem.out.println(dog.age); // 22. Từ khóa this
Phần tiêu đề “2. Từ khóa this”this tham chiếu đến đối tượng hiện tại. Dùng this.name để phân biệt thuộc tính của đối tượng với tham số cùng tên trong constructor:
public Dog(String name, int age) { this.name = name; // this.name (thuộc tính) = name (tham số) this.age = age;}Nếu không dùng this, name = name; sẽ chỉ gán tham số cho chính nó, thuộc tính name của đối tượng sẽ vẫn là null.
3. Constructor mặc định (default constructor)
Phần tiêu đề “3. Constructor mặc định (default constructor)”Nếu một class không khai báo constructor nào, Java tự động cung cấp một constructor mặc định không tham số, không làm gì cả:
public class Dog { String name; // mặc định null vì không có constructor để gán giá trị}
Dog dog = new Dog(); // dùng constructor mặc định do Java tự sinh ra⚠️ Ngay khi bạn tự khai báo bất kỳ constructor nào, Java sẽ không còn tự sinh constructor mặc định nữa - nếu vẫn cần gọi new Dog() không tham số, phải tự viết thêm constructor đó.
4. Nạp chồng constructor (constructor overloading)
Phần tiêu đề “4. Nạp chồng constructor (constructor overloading)”Giống như phương thức thường, một class có thể có nhiều constructor với danh sách tham số khác nhau:
public class Dog { String name; int age;
public Dog() { // constructor không tham số this.name = "Không tên"; this.age = 0; }
public Dog(String name, int age) { // constructor có tham số this.name = name; this.age = age; }}
Dog dog1 = new Dog(); // dùng constructor không tham sốDog dog2 = new Dog("Lucky", 2); // dùng constructor có tham số5. Gọi constructor khác trong cùng class: this(...)
Phần tiêu đề “5. Gọi constructor khác trong cùng class: this(...)”Để tránh lặp lại code khởi tạo, một constructor có thể gọi một constructor khác trong cùng class bằng this(...) - phải là dòng đầu tiên trong thân constructor:
public class Dog { String name; int age;
public Dog(String name, int age) { this.name = name; this.age = age; }
public Dog(String name) { this(name, 0); // gọi constructor 2 tham số ở trên, mặc định age = 0 }}Tổng kết
Phần tiêu đề “Tổng kết”- Constructor cùng tên với class, không có kiểu trả về, tự động chạy khi
new thistham chiếu đến đối tượng hiện tại - dùng để phân biệt field và tham số trùng tên- Không khai báo constructor nào → Java tự sinh constructor mặc định không tham số
this(...)gọi constructor khác trong cùng class để tránh lặp code khởi tạo