Tại Sao Trong Java Nên Viết Phương Thức Khởi Tạo Mặc định?

Nói theo lý thuyết OOP, khi 1 object được reference từ một class, các thứ có trong phương thức khởi tạo sẽ được set mặc định cho object đó ngay từ khi khai báo. Mình sẽ lấy ví dụ với một số nguyên a. Có 2 đoạn code sau:

Có phương thức khởi tạo

public class WithCtor { //cho số nguyên a và giá trị của nó là null public int a; //cú pháp của phương thức khởi tạo(<tên_class>()). Lúc này giá trị của a trong hàm này là 10 WithCtor() { a = 10; } //Phương thức cộng 1 số từ tham số của hàm vào a public int add(int number) { return a + number; } public int getA() { return a; } }

Ko có phương thức khởi tạo:

public class WithoutCtor { //cho số nguyên a và giá trị của nó là null public int a; //Phương thức cộng 1 số từ tham số của hàm vào a public int add(int number) { return a + number; } public int getA() { return a; } }

Rồi thêm entry point để chạy code:

public class Main { public static void main(String[] args) { WithCtor withCtor = new WithCtor() // WithCtor() chính là hàm khởi tạo đó! WithoutCtor withoutCtor = new WithoutCtor() // WithoutCtor() cũng là hàm khởi tạo nhưng không được khai bái vào gán giá trị withCtor.add(5); //Cộng 5 vào a của WithCtor withoutCtor.add(5); //Tương tự như trên System.out.println(withCtor.getA); //Output: 15 System.out.println(withoutCtor.getA); //Output: 5 } }

Theo như code trên 2 output hoàn toàn khác nhau mặc dù phương thức add() có cùng tham số mà a khi tạo ban đầu của cả 2 class đều là null(giá trị trống). Vì do class WithCtor có phương thức khởi tạo và trong đó set a bằng 10 tức là bao nhiêu object lấy từ nó ra đều có mặc định a = 10, trừ khi bạn đổi a bằng số nào đó khác trong phương thức khởi tạo của WithCtor.

Khái niệm này ban đầu mình cũng thấy khó hiểu, về sau thấy quen.

Bạn không bắt buộc sử dụng nó nhưng có thể dùng theo cách sau:

public class ViDu { public int a, b, c; ViDu(int a, int b, int c) { this.a = a; this.b = b; this.c = c; } }

Cách này dùng ctor tiện hơn vì đỡ phải tạo các set method nhiều!

Từ khóa » Hàm Khởi Tạo Mặc định Trong Java