Phương thức khởi tạo, hay gọi Hàm khởi tạo cũng được, bạn cũng có thể gọi là Constructor, mình thì mình sẽ dùng constructor luôn cho ngắn gọn.
Constructor là gì?
Thực chất thì constructor này cũng là một phương thức, nhưng nó đặc biệt ở chỗ là, ngay khi mà bạn khởi tạo một đối tượng bằng từ khóa new, thì constructor của đối tượng đó sẽ lập tức được gọi đến một cách tự động. Có nghĩa là nếu với phương thức bình thường, bạn phải gọi đến nó thông qua toán tử chấm (“.”) thì phương thức đó mới được thực thi, còn với constructor, ngay khi biên dịch đến từ khóa new, hệ thống sẽ thực thi một constructor tương ứng của đối tượng, tùy vào constructor nào mà bạn chỉ định.
Mục đích chính mà constructor mang lại, không gì khác ngoài tác dụng Khởi tạo. Constructor giúp đối tượng vừa được tạo ra đó, có cơ hội được khởi tạo các giá trị cho các thuộc tính bên trong nó. Hoặc có thể giúp đối tượng đó gọi đến các phương thức tương ứng khác nhằm khởi tạo các logic bên trong đối tượng.
Constructor được nắm gọn trong các ý sau :
– Constructor trong Java là một block code được gọi khi một thể hiện của một đối tượng được tạo và bộ nhớ được cấp phát cho đối tượng đó.
– Constructor là một loại phương thức đặc biệt được sử dụng để khởi tạo một đối tượng. Bạn cũng có thể sử dụng access modifiers trong khi khai báo Constructor.
– Constructor được gọi tại thời điểm tạo đối tượng. Nó khởi tạo các giá trị để cung cấp dữ liệu cho các đối tượng, đó là lý do tại sao nó được gọi là constructor.
Constructor là một phần quan trọng phải hiểu để có thể học lập trình Java hiệu quả. Vì vậy, để bắt đầu, hãy đến với các Quy tắc tạo Constructor trong Java.
Trước khi hiểu rõ hơn về cách sử dụng một constructor, chúng ta hãy xem cách khai báo chúng.
Khai Báo Constructor :
Trước hết mình xin nói qua cú pháp cho một constructor, để bạn có thể mang ra so sánh với việc khai báo một phương thức bình thường, xem có khác gì không nhé. Cú pháp của một constructor như sau.
[khả_năng_truy_cập] tên_phương_thức () {
// Các dòng code
}

Như vậy bạn cũng có thể thấy sự khác biệt, tuy nhiên mình cũng điểm qua các thành phần bên trong cú pháp trên cho nó rõ ràng.
– Đầu tiên, constructor không có kiểu trả về như phương thức bình thường nhé.
– Khả năng truy cập –Bạn có thể sử dụng access modifiers trong khi khai báo Constructor. Tuy nhiên trong bài học hôm nay, mình đều sẽ dùng public cho các constructor, nó có nghĩa là ở đâu cũng có thể dùng đến các constructor này.
– tên phương thức – Khác với các phương thức bình thường, tên của constructor phải cùng với tên lớp. Để giúp phân biệt đâu là constructor và đâu là phương thức bình thường í mà. (constructor của mình trùng tên với class, đều là “Student”).
– các tham số truyền vào – Phần này thì giống với phương thức bình thường, không có gì để nói thêm.
Vậy chốt lại chúng ta có 2 quy tắc để khởi tạo 1 constructor.
Các quy tắc tạo constructor trong java
- Tên constructor phải giống tên lớp chứa nó.
- Constructor không có kiểu trả về tường minh.
Có phải constructor chỉ đơn giản là 1 phương thức có cùng tên với tên lớp chứa nó và không có kiểu trả về thôi không ? Mình xin trả lời là không, cùng mình tìm hiểu sâu hơn về constructor nhé.
Các kiểu của java constructor :
Có 2 kiểu của constructor:
- Constructor mặc định (không có tham số truyền vào).
- Constructor tham số.

1.Constructor mặc định trong java.
-Một constructor mà không có tham số được gọi là constructor mặc định.
Như mình demo bên trên, thì constructor Student mình tạo không hề có tham số truyền vào, và những constructor như vậy gọi là constructor mặc định.

Thường thì bạn sẽ không cần khởi tạo 1 constructor mặc định vì trong java, khi chạy trương trình thì trình biên dịch sẽ tự động khởi tạo 1 constructor mặc định trong lớp đó.
Nhưng mình khuyên các bạn là nên tạo 1 constructor mặc định, lý do vì sao thì cùng mình đi xuống tìm hiểu loại constructor tiếp theo. Giờ thì mình sẽ demo 1 đoạn code sử dụng constructor mặc định.

Trong ví dụ trên, mình không tạo bất kỳ constructor nào, vì vậy trình biên dịch tự động tạo một constructor mặc định.
Constructor mặc định cung cấp các giá trị mặc định như 0, null, (tùy thuộc vào kiểu dữ liệu) … tới đối tượng được khởi tạo. Vì bên trên mình không khởi tạo bất kì giá trị nào cho đối tượng Student nên 2 thuộc tính mặc định là name và age sẽ lần lượt là null và 0.
2.Constructor tham số.
Constructor mặc định là constructor không có tham số vậy constructor có tham số là constructor có tham số truyền vào, đơn giản không nào 😀
Constructor tham số được sử dụng để cung cấp các giá trị khác nhau cho các đối tượng khác nhau.
Ví dụ nhé.

Như bạn thấy thì mình đã khởi tạo 4 constructor, trong đó có 3 constructor truyền vào tham số và 1 constructor mặc định mình tạo ban đầu.
Trong class, bạn có thể khởi tạo 1 hoặc nhiều constructor, tùy thuộc vào số lượng thuộc tính của đối tượng. Và các constructor không được phép có tham số truyền vào giống nhau. Bạn có thể truyền 1, 2 hay bao nhiêu số lượng thuộc tính của đối tượng. Nhưng không được phép tạo một constructor mà có tham số truyền vào giống nhau.

Khi bạn tạo 2 constructor có cùng kiểu tham số truyền vào thì lập tức trình biên dịch sẽ báo lỗi là đã tồn tại 1 constructor như vậy trong class. Việc này nhằm mục đíc để phân biệt các constructor với nhau.

Mình truyền tham số theo lần lượt các constructor mình tạo, khi 1 constructor mà không có truyền vào 1 thuộc tính của đối tượng, thì mặc định nó sẽ là 0 hoặc null tùy theo kiểu dữ liệu (Nhắc lại bên trên tí :v )
Ví dụ bên trên cũng là 1 ví dụ về nạp chồng constructor hay còn gọi là Constructor Overloading trong java.
Constructor Overloading là một kỹ thuật trong Java. Bạn có thể tạo nhiều constructor trong cùng một lớp với danh sách tham số truyền vào khác nhau. Trình biên dịch phân biệt các constructor này thông qua số lượng và kiểu của các tham số truyền vào.
Thì đến đây bạn cũng đã hiểu phần nào về constructor trong java rồi, mình sẽ tổng kết lại bằng 1 bảng sau đây.
| Constructor | Phương thức |
|---|---|
| Constructor được sử dụng để khởi tạo trạng thái của một đối tượng. | Phương thức được sử dụng để thể hiện hành động của một đối tượng. |
| Constructor không có kiểu trả về. | Phương thức có kiểu trả về. (trừ void không có kiểu trả về) |
| Constructor được gọi ngầm. | Phương thức được gọi tường minh. |
| Trình biên dịch Java tạo ra constructor mặc định nếu bạn không có constructor nào. | Phương thức không được tạo ra bởi trình biên dịch Java. |
| Tên của constructor phải giống tên lớp. | Tên phương thức có thể giống hoặc khác tên lớp. |
Cảm ơn mọi người vì đã bỏ thời gian để đọc blog của mình, hẹn các bạn vào bài viết sau.