NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
27/06/2024
Lượt xem

Constructor trong Java: hướng dẫn tất tần tật cho người mới bắt đầu

27/06/2024
11 phút đọc
Lượt xem

Đánh giá

Trong lập trình Java, hàm Constructor đóng vai trò vô cùng quan trọng, là nền tảng cho việc tạo lập và quản lý các đối tượng. Bài viết này sẽ cung cấp tất tần tật kiến thức về hàm Constructor trong Java để giúp bạn xây dựng chương trình hiệu quả.

Tìm hiểu về Constructor trong Java

Constructor là một phương thức đặc biệt trong Java đóng vai trò quan trọng có nhiệm vụ khởi tạo và thiết lập trạng thái ban đầu cho các đối tượng. Khi bạn sử dụng từ khóa new, constructor sẽ được tự động gọi để khởi tạo một đối tượng mới, sau đó gán các thuộc tính và giá trị mặc định cho thuộc tính cũng như khởi tạo các đối tượng phụ thuộc cần thiết cho đối tượng đó.

Constructor trong Java là một phương thức đặc biệt được sử dụng để khởi tạo các đối tượng của một lớp
Constructor trong Java là một phương thức đặc biệt được sử dụng để khởi tạo các đối tượng của một lớp

Các quy tắc tạo Constructor trong Java

Dưới đây là các quy tắc then chốt mà bất cứ lập trình viên nào cũng phải ghi nhớ khi tạo Constructor trong Java:

  • Không có kiểu trả về: Constructor không có kiểu trả về, đồng thời không thể được khai báo với các từ khóa abstract, final, static hay synchronized. Lý do nằm ở chỗ Constructor chỉ phục vụ cho mục đích khởi tạo đối tượng, không mang tính kế thừa, chỉ thuộc về đối tượng cụ thể chứ không phải lớp và không thể được gọi độc lập.
  • Tên Constructor: Tên Constructor phải giống hệt tên với tên lớp chứa nó. Quy ước này giúp phân biệt Constructor với các phương thức thông thường trong Java.

3 kiểu hàm khởi tạo trong Java

1. Hàm khởi tạo mặc định

Hàm khởi tạo mặc định (hay Default constructor) là một phương thức đặc biệt được tạo ra tự động bởi Java nếu không có constructor nào được khai báo trong lớp. Đây là constructor không có tham số và có nhiệm vụ khởi tạo các thuộc tính của lớp với giá trị mặc định tương ứng: số nguyên: 0, số thực: 0.0, boolean: false, đối tượng: null

Cú pháp:

public ClassName() {
    // Các câu lệnh khởi tạo
}

Ví dụ:

public class SinhVien {
    private String name;
    private int age;
    // Default constructor
    public SinhVien() {
        this.name= "";
         this.age= 0;
    }
]

2. Hàm khởi tạo không có tham số

Hàm khởi tạo không có tham số (hay No-args constructor) là phương thức đặc biệt giúp bạn bạn kiểm soát cách khởi tạo giá trị cho các thuộc tính của một đối tượng mới. Ví dụ, bạn có thể thiết lập kết nối tới database hoặc gán giá trị mặc định cho các thuộc tính.

Đây cũng là một constructor không có tham số tương tự như hàm khởi tạo mặc định. Tuy nhiên khác với default constructor có phần mã thân (body) rỗng và không chứa câu lệnh, no-args constructor cho phép bạn viết mã khởi tạo tùy chỉnh.

Cú pháp:

public ClassName() {
    // Các câu lệnh khởi tạo
}

Ví dụ:

public class SinhVien {
    private String name;
    private int age;
    // No-args constructor
  public SinhVien() {
        name = "Lan";
        age = 20;
    }
]

Có thể thấy No-args constructor được định nghĩa cho lớp SinhVien để bạn có thể chỉ định giá trị mặc định khi khởi tạo cho các thuộc tính ten, tuoi. 

3. Hàm khởi tạo có tham số

Hàm khởi tạo có tham số (hay Parameterized constructor) là phương thức đặc biệt dùng để khởi tạo đối tượng với các giá trị ban đầu được chỉ định. Đây là constructor có tham số rất hữu ích khi bạn cần truyền giá trị cụ thể cho các thuộc tính của đối tượng ngay khi tạo. Từ đó đảm bảo rằng đối tượng được khởi tạo với các trạng thái mong muốn ngay từ đầu.

Cú pháp:

public ClassName(Type1 param1, Type2 param2, …) {
    // Các câu lệnh khởi tạo
}

Ví dụ:

public class SinhVien {
    private String name;
    private int age;
    public SinhVien(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Tìm hiểu về Constructor Overloading trong Java là gì?

Constructor overloading là một kỹ thuật quan trọng trong Java cho phép tạo nhiều constructor trong cùng một lớp với các tham số khác nhau. Nhờ vậy, lập trình viên có thể khởi tạo đối tượng một cách linh hoạt, phù hợp với từng trường hợp cụ thể.

Ví dụ: Bạn đang phát triển phần mềm quản lý nhân viên và muốn tạo 1 lớp Staff để lưu trữ thông tin của từng người. Lớp này cần có một constructor để khởi tạo đối tượng Staff với các thông tin cơ bản như tên, tuổi, giới tính và địa chỉ. Đồng thời, bạn cũng cần thêm một constructor để khởi tạo đối tượng với đầy đủ thông tin trên và thêm thông tin mức lương trung bình. 

public class Staff {   
    String name;
    int age;
    String gender;
    String address;
    double salary;  
    // Constructor với thông tin cơ bản
    public Staff(String name, int age, String gender, String address) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.address = address;
    }   
    // Constructor với tất cả thông tin
    public Staff(String name, int age, String gender, String address, double salary) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.address = address;
        this.salary = salary;
    }
    // Getter and setter methods for all attributes
    // …
}

Trong ví dụ trên, chúng ta tạo hai đối tượng staff1 và staff2 đại diện cho hai nhân viên khác nhau. Sau đó, chúng ta in ra thông tin của từng nhân viên bằng cách sử dụng các thuộc tính của đối tượng (staff1.name, staff1.age, …).

Khái niệm Copy Constructor trong Java

Copy constructor là một loại constructor đặc biệt trong Java, được sử dụng để tạo ra một bản sao chính xác của một đối tượng hiện có. Copy constructor thường được định nghĩa với 2 tham số: 

  • this: tham chiếu đến đối tượng mới.
  • other: tham chiếu đối tượng nguồn cần sao chép.

Ngoài copy constructor, Java còn cung cấp hai phương pháp sao chép phổ biến khác là gán trực tiếp giá trị của một đối tượng cho đối tượng khác và sử dụng phương thức clone(). Tuy nhiên trong những trường hợp sau, phương thức copy constructor sẽ được ưu tiên sử dụng:

  • Tạo đối tượng mới là bản sao chính xác (với các thuộc tính y hệt) của một đối tượng hiện có.
  • Khi muốn thực hiện các thao tác trên đối tượng mà không ảnh hưởng đến bản gốc.
  • Cần thực hiện các phép toán trên đối tượng mà không muốn thay đổi giá trị của chúng.

Ví dụ sử dụng copy constructor:

public class Car {
    private String model;
    private int year;
    // Constructor
    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }
    // Copy constructor
    public Car(Car otherCar) {
        this.model = otherCar.model;
        this.year = otherCar.year;
    }
    // Getters and setters
    public String getModel() {
        return model;
    }
    public void setModel(String model) {
        this.model = model;
    }
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
}
// Main class
public class Main {
    public static void main(String[] args) {
        // Tạo một đối tượng Car với model là “BMW” và năm sản xuất là 2021
        Car car1 = new Car(“BMW”, 2021);
        // Sử dụng copy constructor để tạo một đối tượng Car mới từ car1
        Car car2 = new Car(car1);
        // Thay đổi model và năm sản xuất của car2
        car2.setModel(“Mercedes”);
        car2.setYear(2022);
        // In ra model và năm sản xuất của cả hai xe
        System.out.println(“Car 1: ” + car1.getModel() + “, ” + car1.getYear());
        System.out.println(“Car 2: ” + car2.getModel() + “, ” + car2.getYear());
    }
}

Kết quả nhận được:

Car 1: BMW, 2021

Car 2: Mercedes, 2022

Tìm hiểu kế thừa Constructor trong Java là gì

Kế thừa Constructor là cơ chế cho phép lớp con gọi constructor của lớp cha để kế thừa thuộc tính của lớp cha. Việc sử dụng từ khóa super() ở dòng đầu tiên trong constructor của lớp con sẽ giúp thực hiện điều này, đồng thời đảm bảo constructor của lớp cha được gọi trước khi khởi tạo constructor của lớp con. Nếu constructor của lớp con không sử dụng super(), trình biên dịch Java sẽ tự động gọi constructor mặc định (no-args constructor) của lớp cha.

Ví dụ:

public class Staff extends Person {
    public Staff (String name, int age, String team) {
          super(name,age); // gọi constructor của lớp cha Person
this.team = team; // khởi tạo thuộc tính team của lớp con Staff
    }
}

Trong ví dụ trên, cú pháp super(name,age) đã được sử dụng để gọi constructor của lớp cha Person. Sau đó, khởi tạo trực tiếp thuộc tính team của lớp Student bằng biến team được truyền vào constructor.

Constructor trong Java dùng để làm gì?

Constructor đóng vai trò thiết yếu trong lập trình hướng đối tượng Java, giúp khởi tạo và gán giá trị ban đầu cho thuộc tính của các đối tượng mới. 

Ví dụ: 

public class XeHoi {
    String ten;
    String mauSac;
    int namSanXuat;

    // Constructor mặc định
    public XeHoi() {
        this.ten = "Chưa rõ";
        this.mauSac = "Chưa rõ";
        this.namSanXuat = 0;
    }

    // Constructor có tham số
    public XeHoi(String ten, String mauSac, int namSanXuat) {
        this.ten = ten;
        this.mauSac = mauSac;
        this.namSanXuat = namSanXuat;
    }
}

Đoạn code này định nghĩa một lớp (class) có tên là XeHoi để biểu diễn các đối tượng xe hơi. Mỗi đối tượng xe hơi sẽ có các thuộc tính (attributes) như tên (ten), màu sắc (mauSac) và năm sản xuất (namSanXuat). Lớp XeHoi cũng có hai constructor để khởi tạo các đối tượng xe hơi với các giá trị ban đầu khác nhau.

Trường hợp bạn tự không định nghĩa constructor nào cho một lớp thì Java sẽ tự động gọi constructor mặc định (default constructor) để gán giá trị ban đầu (mặc định thường là 0, null, …) tương ứng theo thuộc tính của đối tượng.

So sánh sự khác biệt giữa Method và Constructor trong lập trình Java

Đặc điểmConstructorMethod
Mục đích sử dụngĐược sử dụng để khởi tạo đối tượng và gán giá trị ban đầu cho các thuộc tính của đối tượng.Được sử dụng để thực hiện một hành động hoặc tính toán nào đó.
Kiểu trả vềKhông có kiểu trả về (cũng không sử dụng từ khóa void).Có thể có hoặc không có kiểu trả về (nếu không có kiểu trả về thì sử dụng từ khóa void).
Cách gọiĐược gọi ngầm định khi sử dụng từ khóa new để tạo đối tượng.Được gọi một cách tường minh thông qua tên của đối tượng và dấu chấm (.), ví dụ: tenDoiTuong.tenPhuongThuc().
drive_spreadsheetExport to Sheets
Tạo tự độngTrình biên dịch có sẵn một constructor mặc định nếu người dùng không tự định nghĩaTrình biên dịch không tạo tự động mà cần được lập trình viên khai báo
TênPhải trùng với tên lớpTự do, không cần trùng với tên lớp

Lời kết

Trên đây là toàn bộ thông tin về constructor trong Java mà bất cứ lập trình viên nào cũng cần nắm rõ. Hy vọng rằng với những kiến thức được chia sẻ trong bài viết này, bạn đã có thể sử dụng constructor thành thạo cho các dự án của mình.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Kết nối với mình qua

Kết nối với mình qua

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Banner group
Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

Pattern

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG