Mục lục
Constructor là một method đặc biệt được sử dụng để khởi tạo một đối tượng trong Java. Constructor có tên trùng với tên class, nhưng sẽ có nhiều override method khác nhau.
public class Person { // contructor Person() {} }
Constructor hoạt động như thế nào?
Từ khoá new
Để làm rõ vấn đề này, giả sử chúng ta cần tạo mới một đối tượng Person
Person person = new Person();
Từ khoá new tạo ra một object của Person, nó sẽ gọi constructor của Person để khởi tạo object.
Ví dụ Khởi tạo Person object với name = “shareprogramming.net”
public class Person { String name; //Constructor Person() { this.name = "shareprogramming.net"; } }
Tiến hành kiểm thử giá trị của name sau khi khởi tạo
public class Main { public static void main(String[] args) { Person obj = new Person(); System.out.println(obj.name); } }
output: shareprogramming.net
Sơ đồ hoạt động
Các loại Constructor
Trong Java, với một class bất kỳ chúng ta có các loại sau:
- Default
- No-arg
- Parameterized
Default constructor
Nếu chúng ta triển khai 1 class không chứa bất kỳ một constructor nào thì trình biên dịch sẽ tự động thêm default constructor cho class đó.
Constructor mặc định không nhận bất kỳ tham số nào cũng không chứa mã triển khai bên trong.
No – arg Constructor
No-arg constructor là 1 constructor không nhận bất kỳ một tham số nào, điểm khác biệt duy nhất với default constructor nó bên trong no-arg constructor có chứa mã triển khai.
class DemoDefault { DemoDefault() { System.out.println("Toi da duoc khoi tao"); } } public class Main { public static void main(String[] args) { DemoDefault example = new DemoDefault(); } }
Output: Toi da duoc khoi tao
Sử dụnng no-arg constructor để khởi tạo giá trị mặc định cho các thuộc tính của object, hoặc làm một số tác vụ khác như là logger, lấy dữ liệu từ bên ngoài etc.
Parameterized Constructor
Constructor có ít nhất một tham số đầu vào gọi là parameterized constructor.
Ví dụ NhanVien class chứa parameterized constructor nhận 2 tham số đầu vào id và name.
public class NhanVien { int Id; String name; NhanVien(int id, String name){ this.Id = id; this.name = name; } void info(){ System.out.println("Id: "+Id+" Name: "+name); } }
public class Main { public static void main(String[] args) { NhanVien obj1 = new NhanVien(1,"Hai"); NhanVien obj2 = new NhanVien(1,"Tuan"); obj1.info(); obj2.info(); } }
Output:
Id: 1 Name: Hai
Id: 2 Name: Tuan
This keyword
Ở các ví dụ dụ trên, từ khóa this được sử dụng rất nhiều, vậy các bạn đặt câu hỏi là tại sao lại dùng nó không?
Từ khoá this được dùng để tham chiếu đến instance hiện tại của class.
public class NhanVien { int Id; String name; NhanVien(int id, String name){ this.Id = id; this.name = name; } }
Ngoài ra, chúng ta có thể dùng từ khoá this với các trường hợp sau
- Tham chiếu biến instance của class
- Tham chiếu đến các method của class
- this để gọi constructor
- this có thể sử dụng như một tham số của method
- this có thể sử dụng như một tham số của constructor
- Dùng this để trả về object class instance
Khác nhau giữa constructor và method
Constructor và method vốn là 2 khái niệm khác nhau, nhưng vì cách viết của constructor khá giống với method nên mình sợ các bạn nhầm lẫn, mình sẽ đưa ra những điểm khác nhau cơ bản giữa chúng.
- Mục đích của constructor là để khởi tạo một object trong khi đó method thực thi các nhiệm vụ để đáp ứng nhu cầu của một object chứa nó.
- Constructor không có kết quả trả về còn method thì có.
- Constructor không thể đi cùng với các từ khoá abstract, final, static etc, method thì được.
Tóm tắt
- Mọi class java thông thường đều có constructor ngoại trừ abstract class và interface.
- Constructor không phải là method và không có kiểu trả về.
- Constructor có tên trùng với tên class.
- Constructor có 3 kiểu chính: default, no-arg, parameterized.
- Nếu bạn implement một class mà không thêm bất kỳ một constructor nào thì trình biên dịch sẽ tự động thêm constructor mặc định cho class đó.
- Từ khóa this dùng để tham chiếu đến class instance hiện tại.
Nguồn tham khảo