Trong Java, phương thức dùng để lưu khối mã thực hiện hành động cụ thể. Khi làm việc với phương thức, bạn có thể gặp khái niệm constructors (hàm tạo).
Hàm tạo là phương thức đặc biệt dùng để khởi tạo đối tượng trong Java. Hàm tạo được gọi khi đối tượng của một lớp được tạo, và dùng để đặt giá trị ban đầu cho đối tượng.
Hướng dẫn này sẽ thảo luận, kèm ví dụ, cơ bản về hàm tạo Java và cách sử dụng hàm tạo trong mã. Sau khi đọc xong hướng dẫn này, bạn sẽ thành chuyên gia dùng hàm tạo Java khởi tạo đối tượng.
Hàm Tạo Java
Hàm tạo khởi tạo đối tượng mới tạo trước khi dùng trong chương trình. Ví dụ, hàm tạo tên Supplier sẽ tạo đối tượng với thuộc tính mặc định của nhà cung cấp.
Hàm tạo có cùng tên với lớp của nó và không trả về giá trị nào. Ví dụ hàm tạo trong Java:
class Supplier { Supplier() { // Code here } }
Trong ví dụ này, khai báo hàm tạo tên Supplier, cùng tên với lớp. Ngoài ra, hàm tạo không có kiểu trả về - như void - đây là điểm khác biệt với các loại phương thức khác.
Có hai quy tắc cần biết khi khai báo hàm tạo. Thứ nhất, tên hàm tạo phải khớp chính xác tên lớp nơi hàm tạo được khai báo. Thứ hai, hàm tạo không thể trả về giá trị.
Cách Tạo Hàm Tạo Java
Có hai loại hàm tạo Java: hàm tạo không đối số (no-arg constructors) và hàm tạo có tham số (parameterized constructors). Hãy phân tích cách tạo hàm tạo dùng cả hai loại.
Hàm Tạo Không Đối Số (No-arg Constructors)
Giả sử chúng ta điều hành cửa hàng tạp hóa và muốn tạo chương trình lưu chi tiết nhà cung cấp chính cho phô mai. Chương trình nên bao gồm hàm tạo lưu thông tin nhà cung cấp, và cũng in các giá trị đó ra bảng điều khiển.
Mã dùng tạo chương trình này:
class MainCheeseSupplier { private String name; private String address; private int discountRate; private String payDate; private MainCheeseSupplier() { name = "J. Acker Dairy"; address = "1600 Johnson Ave. San Francisco 94127"; discountRate = 2; payDate = "Last day of the month."; } public static void main(String[] args) { MainCheeseSupplier jadairy = new MainCheeseSupplier(); System.out.println("Name: " + jadairy.name); System.out.println("Address: " + jadairy.address); System.out.println("Discount rate: " + jadairy.discountRate); System.out.println("Pay date: " + jadairy.payDate); } }
Mã trả về:
Name: J. Acker Dairy Address: 1600 Johnson Ave. San Francisco 94127 Discount rate: 2 Pay date: Last day of the month.
Đầu tiên, định nghĩa lớp MainCheeseSupplier chứa mã chương trình. Sau đó khởi tạo bốn biến private - name, address, discountRate, và payDate - dùng lưu thông tin nhà cung cấp phô mai chính.
Sau khi khai báo biến, tạo hàm tạo tên MainCheeseSupplier khởi tạo chúng với giá trị mặc định. Sau đó, trong chương trình chính, khởi tạo instance của hàm tạo bằng mã:
MainCheeseSupplier jadairy = new MainCheeseSupplier();
Mã này gán biến jadairy instance mới của đối tượng MainCheeseSupplier. Sau đó in từng giá trị trong jadairy ra bảng điều khiển bằng cách tham chiếu biến jadairy và thuộc tính muốn truy cập.
Đây là ví dụ hàm tạo không đối số (no-arg constructor). Vì hàm tạo không chấp nhận tham số nào, gọi là no-arg.
Hàm Tạo Có Tham Số (Parameterized Constructor)
Tuy nhiên, có trường hợp bạn muốn truyền đối số qua hàm tạo.
Quay lại cửa hàng tạp hóa. Giả sử muốn định nghĩa giá trị chi tiết nhà cung cấp phô mai chính trong chương trình chính và gán cho hàm tạo khi chương trình chính bắt đầu thực thi.
Chúng ta có thể muốn làm vậy vì khởi tạo nhiều nhà cung cấp với giá trị khác nhau, hoặc không muốn gán giá trị cụ thể cho hàm tạo.
Nếu truyền đối số qua hàm tạo, gọi là hàm tạo có tham số (parameterized constructor).
Chúng ta có thể truyền danh sách tham số qua hàm tạo như sau:
class MainCheeseSupplier { String name; String address; int discountRate; String payDate; public MainCheeseSupplier(String supplierName, String supplierAddress, int supplierDiscountRate, String supplierPayDate) { name = supplierName; address = supplierAddress; discountRate = supplierDiscountRate; payDate = supplierPayDate; } public static void main(String[] args) { MainCheeseSupplier jadairy = new MainCheeseSupplier("J. Acker Dairy", "1600 Johnson Ave. San Francisco 94127", 2, "Last day of the month."); System.out.println("Name: " + jadairy.name); System.out.println("Address: " + jadairy.address); System.out.println("Discount rate: " + jadairy.discountRate); System.out.println("Pay date: " + jadairy.payDate); } }
Mã trả về:
Name: J. Acker Dairy Address: 1600 Johnson Ave. San Francisco 94127 Discount rate: 2 Pay date: Last day of the month.
Như bạn thấy, đầu ra mã trong ví dụ này giống ví dụ đầu. Tuy nhiên, có một khác biệt lớn: thay vì khởi tạo giá trị hàm tạo trong chính hàm tạo, chúng ta truyền chúng như tham số khi khai báo instance của hàm tạo.
Trong ví dụ trên, hàm tạo MainCheeseSupplier chấp nhận bốn tham số: supplierName, supplierAddress, supplierDiscountRate, và supplierPayDate. Khi khởi tạo instance của hàm tạo MainCheeseSupplier, truyền giá trị qua các tham số này, sau đó được đọc bởi hàm tạo. Mã khởi tạo instance:
MainCheeseSupplier jadairy = new MainCheeseSupplier("J. Acker Dairy", "1600 Johnson Ave. San Francisco 94127", 2, "Last day of the month.");
Sau đó in nội dung giá trị lưu trong hàm tạo MainCheeseSupplier.
Kết Luận
Hàm tạo Java là phương thức đặc biệt dùng khởi tạo đối tượng. Hàm tạo được gọi khi đối tượng của lớp được tạo và có thể dùng đặt giá trị ban đầu cho thuộc tính đối tượng.
Hướng dẫn này đã thảo luận, kèm ví dụ, cách tạo và làm việc với hàm tạo trong Java. Bây giờ bạn đã sẵn sàng bắt đầu dùng hàm tạo Java như chuyên gia!