Java - Các Hàm Khởi Tạo

Chào mừng, các nhà phát triển Java tương lai! Hôm nay, chúng ta sẽ đi một trong những khái niệm cơ bản nhất trong lập trình Java: các hàm khởi tạo. Đừng lo lắng nếu bạn mới bắt đầu với lập trình; tôi sẽ hướng dẫn bạn qua chủ đề này bước به bước, như thế tôi đã làm cho hàng ngàn học viên trong những năm dạy học. Vậy, hãy lấy ly cà phê (hoặc đồ uống yêu thích của bạn), và hãy cùng nhau bắt đầu hành trình thú vị này!

Java - Constructors

Các Hàm Khởi Tạo Là Gì?

Hãy tưởng tượng bạn đang xây một ngôi nhà. Trước khi bạn bắt đầu trang trí nó, bạn cần phải xây dựng cơ sở và cấu trúc cơ bản. Trong Java, các hàm khởi tạo như bản vẽ để tạo ra các đối tượng - chúng thiết lập trạng thái ban đầu của đối tượng khi nó được tạo ra.

Một hàm khởi tạo là một phương thức đặc biệt được gọi khi một đối tượng của lớp được tạo ra. Nó được sử dụng để khởi tạo trạng thái của đối tượng và cấp phát bộ nhớ cho nó.

Các Điểm Chính Về Các Hàm Khởi Tạo:

  1. Các hàm khởi tạo có cùng tên với lớp.
  2. Chúng không có kiểu trả về (thậm chí không có void).
  3. Chúng được gọi tự động khi một đối tượng được tạo ra.

Hãy xem một ví dụ đơn giản:

public class House {
String color;
int numberOfRooms;

// Đây là một hàm khởi tạo
public House() {
color = "Trắng";
numberOfRooms = 3;
}
}

Trong ví dụ này, House() là một hàm khởi tạo. Nó thiết lập màu mặc định là "Trắng" và số phòng là 3 cho bất kỳ đối tượng House mới nào được tạo ra.

Quy Tắc Tạo Các Hàm Khởi Tạo Java

Bây giờ chúng ta đã xây dựng nền tảng, hãy xây dựng thêm một số quy tắc quan trọng:

  1. Tên hàm khởi tạo phải trùng khớp với tên lớp chính xác.
  2. Các hàm khởi tạo không thể có kiểu trả về (thậm chí không có void).
  3. Các hàm khởi tạo có thể có các phương thức truy cập (public, private, protected, hoặc mặc định).
  4. Nếu bạn không cung cấp bất kỳ hàm khởi tạo nào, Java sẽ tạo một hàm khởi tạo mặc định không có tham số cho bạn.

Tạo Một Hàm Khởi Tạo Java

Hãy tạo một ví dụ chi tiết hơn để minh họa cách tạo và sử dụng các hàm khởi tạo:

public class Student {
String name;
int age;
String major;

// Hàm khởi tạo
public Student(String studentName, int studentAge, String studentMajor) {
name = studentName;
age = studentAge;
major = studentMajor;
}

// Phương thức hiển thị thông tin sinh viên
public void displayInfo() {
System.out.println("Tên: " + name);
System.out.println("Tuổi: " + age);
System.out.println("Chuyên ngành: " + major);
}

public static void main(String[] args) {
// Tạo một đối tượng Student mới
Student newStudent = new Student("Alice", 20, "Kỹ thuật Máy tính");
newStudent.displayInfo();
}
}

Trong ví dụ này, chúng ta đã tạo một lớp Student với một hàm khởi tạo có ba tham số. Khi chúng ta tạo một đối tượng Student mới, chúng ta truyền vào các thông tin cần thiết, và hàm khởi tạo khởi tạo trạng thái của đối tượng.

Nếu bạn chạy mã này, bạn sẽ thấy:

Tên: Alice
Tuổi: 20
Chuyên ngành: Kỹ thuật Máy tính

Các Loại Hàm Khởi Tạo Java

Giống như có nhiều loại ngôi nhà khác nhau (bungalow, căn hộ, ngôi nhà lớn), có nhiều loại hàm khởi tạo trong Java. Hãy khám phá chúng:

1. Hàm Khởi Tạo Mặc Định

Nếu bạn không cung cấp bất kỳ hàm khởi tạo nào, Java sẽ tạo một cho bạn. Đây được gọi là hàm khởi tạo mặc định.

public class Car {
// Java sẽ tạo một hàm khởi tạo mặc định ở đây
}

// Sử dụng
Car myCar = new Car();

2. Hàm Khởi Tạo Không Có Tham Số

Đây là một hàm khởi tạo không có tham số.

public class Bicycle {
String color;

// Hàm khởi tạo không có tham số
public Bicycle() {
color = "Đỏ";
}
}

// Sử dụng
Bicycle myBike = new Bicycle();

3. Hàm Khởi Tạo Có Tham Số

Loại hàm khởi tạo này chấp nhận một hoặc nhiều tham số.

public class Book {
String title;
String author;

// Hàm khởi tạo có tham số
public Book(String bookTitle, String bookAuthor) {
title = bookTitle;
author = bookAuthor;
}
}

// Sử dụng
Book myBook = new Book("The Great Gatsby", "F. Scott Fitzgerald");

Tải Hàm Khởi Tạo Trong Java

Nhớ khi tôi nói về các loại ngôi nhà khác nhau? Đôi khi bạn có thể muốn tạo các đối tượng theo cách khác nhau. Đây là nơi tải hàm khởi tạo đến được sử dụng.

Tải hàm khởi tạo cho phép một lớp có nhiều hơn một hàm khởi tạo. Mỗi hàm khởi tạo có thể có danh sách tham số khác nhau. Điều này cung cấp linh hoạt trong việc tạo ra các đối tượng.

Hãy xem một ví dụ:

public class Pizza {
String size;
String topping;
boolean extraCheese;

// Hàm khởi tạo với tất cả các tham số
public Pizza(String pizzaSize, String pizzaTopping, boolean hasExtraCheese) {
size = pizzaSize;
topping = pizzaTopping;
extraCheese = hasExtraCheese;
}

// Hàm khởi tạo với kích thước và topping
public Pizza(String pizzaSize, String pizzaTopping) {
this(pizzaSize, pizzaTopping, false); // Gọi hàm khởi tạo đầu tiên
}

// Hàm khởi tạo chỉ với kích thước
public Pizza(String pizzaSize) {
this(pizzaSize, "Margherita", false); // Gọi hàm khởi tạo đầu tiên
}

// Phương thức hiển thị thông tin pizza
public void displayInfo() {
System.out.println("Kích thước: " + size);
System.out.println("Topping: " + topping);
System.out.println("Phô mai thêm: " + (extraCheese ? "Có" : "Không"));
}

public static void main(String[] args) {
Pizza pizza1 = new Pizza("Lớn", "Pepperoni", true);
Pizza pizza2 = new Pizza("Vừa", "Nấm");
Pizza pizza3 = new Pizza("Nhỏ");

System.out.println("Pizza 1:");
pizza1.displayInfo();
System.out.println("\nPizza 2:");
pizza2.displayInfo();
System.out.println("\nPizza 3:");
pizza3.displayInfo();
}
}

Lớp Pizza này minh họa tải hàm khởi tạo. Chúng ta có ba hàm khởi tạo, mỗi hàm có danh sách tham số khác nhau. Điều này cho phép chúng ta tạo các đối tượng Pizza theo nhiều cách khác nhau, cung cấp linh hoạt cho người dùng của lớp của chúng ta.

Khi bạn chạy mã này, bạn sẽ thấy:

Pizza 1:
Kích thước: Lớn
Topping: Pepperoni
Phô mai thêm: Có

Pizza 2:
Kích thước: Vừa
Topping: Nấm
Phô mai thêm: Không

Pizza 3:
Kích thước: Nhỏ
Topping: Margherita
Phô mai thêm: Không

Và đó là tất cả! Chúng ta đã xây dựng hiểu biết vững chắc về các hàm khởi tạo Java từ đất liền. Hãy nhớ, luyện tập sẽ làm bạn thành thạo. Thử tạo các lớp của riêng bạn và thử nghiệm các loại hàm khởi tạo khác nhau. Trước khi bạn biết, bạn sẽ tạo các đối tượng Java như một chuyên gia!

Chúc mừng mã số, các nhà phát triển Java tương lai! ??‍??‍?

Credits: Image by storyset