Rate this post

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các hàm tạo Java, các kiểu của chúng và cách sử dụng chúng với sự trợ giúp của các ví dụ.

Các bài viết liên quan:

Constructors là gì?

Hàm tạo trong Java tương tự như một phương thức được gọi khi một đối tượng của lớp được tạo.

Không giống như các phương thức Java, hàm tạo có cùng tên với tên của lớp và không có bất kỳ kiểu trả về nào. Ví dụ,

class Object_ex {
  Object_ex() {
    // constructor body
  }
}

Ở đây, Object_ex() là một hàm tạo. Nó có cùng tên với tên của lớp và không có kiểu trả về.

Đề xuất đọc: Tại sao hàm tạo không trả về giá trị

Ví dụ 1: Java Constructor

class Main {
  private String name;

  // constructor
  Main() {
    System.out.println("Constructor Called:");
    name = "Constructor1";
  }

  public static void main(String[] args) {

    // constructor is invoked while
    // creating an object of the Main class
    Main obj = new Main();
    System.out.println("The name is " + obj.name);
  }
}

Trong ví dụ trên, chúng tôi đã tạo một hàm tạo có tên là Main(). Bên trong hàm tạo, chúng ta đang khởi tạo giá trị của biến name.

Chú ý câu lệnh tạo đối tượng của lớp Main.

Main obj = new Main();

Ở đây, khi đối tượng được tạo, hàm tạo Main() được gọi. Và, giá trị của biến tên được khởi tạo.

Do đó, chương trình in giá trị của các biến tên là Constructor.

Các loại Constructor

Trong Java, constructor có thể được chia thành 3 loại:

  1. No-Arg Constructor
  2. Parameterized Constructor
  3. Default Constructor

Java No-Arg Constructor

Tương tự như các phương thức, một hàm tạo Java có thể có hoặc không có bất kỳ tham số (đối số) nào.

Nếu một hàm tạo không chấp nhận bất kỳ tham số nào, thì nó được gọi là hàm tạo không có đối số. Ví dụ,

private Constructor() {
   // body of the constructor
}

Ví dụ 2: Hàm tạo không có đối số riêng của Java

class Main {

  int i;

  // constructor with no parameter
  private Main() {
    i = 5;
    System.out.println("Constructor is called");
  }

  public static void main(String[] args) {

    // calling the constructor without any parameter
    Main obj = new Main();
    System.out.println("Value of i: " + obj.i);
  }
}

Trong ví dụ trên, chúng ta đã tạo một hàm tạo Main(). Ở đây, hàm tạo không chấp nhận bất kỳ tham số nào. Do đó, nó được gọi là hàm tạo không có đối số.

Lưu ý rằng chúng tôi đã khai báo hàm tạo là riêng tư.

Khi một hàm tạo được khai báo là riêng tư, nó không thể được truy cập từ bên ngoài lớp. Vì vậy, việc tạo các đối tượng từ bên ngoài lớp bị cấm sử dụng hàm tạo riêng.

Ở đây, chúng ta đang tạo đối tượng bên trong cùng một lớp. Do đó, chương trình có thể truy cập hàm tạo. Để tìm hiểu thêm, hãy truy cập Constructors riêng triển khai Java.

Tuy nhiên, nếu chúng ta muốn tạo các đối tượng bên ngoài lớp, thì chúng ta cần khai báo phương thức khởi tạo là public.

Ví dụ 3: Java public no-arg constructors

class Company {
  String name;

  // public constructor
  public Company() {
    name = "copany";
  }
}

class Main {
  public static void main(String[] args) {

    // object is created in another class
    Company obj = new Company();
    System.out.println("Company name = " + obj.name);
  }
}

Java Parameterized Constructor

Một hàm tạo Java cũng có thể chấp nhận một hoặc nhiều tham số. Các hàm tạo như vậy được gọi là hàm tạo được tham số hóa (hàm tạo có tham số).

Ví dụ 4: Hàm tạo được tham số hóa

class Main {

  String languages;

  // constructor accepting single value
  Main(String lang) {
    languages = lang;
    System.out.println(languages + " Programming Language");
  }

  public static void main(String[] args) {

    // call constructor by passing a single value
    Main obj1 = new Main("Java");
    Main obj2 = new Main("Python");
    Main obj3 = new Main("C");
  }
}

Trong ví dụ trên, chúng tôi đã tạo một hàm tạo có tên là Main(). Ở đây, hàm tạo nhận một tham số duy nhất. Chú ý biểu thức,

Main obj1 = new Main(“Java”);

Ở đây, chúng tôi đang chuyển một giá trị duy nhất cho hàm tạo. Dựa trên đối số được truyền, biến ngôn ngữ được khởi tạo bên trong hàm tạo.

Java Default Constructor

Nếu chúng ta không tạo bất kỳ hàm tạo nào, trình biên dịch Java sẽ tự động tạo một hàm tạo không có đối số trong quá trình thực thi chương trình. Hàm tạo này được gọi là hàm tạo mặc định.

Ví dụ 5: Constructors mặc định

class Main {

  int a;
  boolean b;

  public static void main(String[] args) {

    // A default constructor is called
    Main obj = new Main();

    System.out.println("Default Value:");
    System.out.println("a = " + obj.a);
    System.out.println("b = " + obj.b);
  }
}

Ở đây, chúng tôi chưa xử lý bất kỳ constructors. Do đó, trình biên dịch Java sẽ tự động tạo hàm tạo mặc định.

Hàm tạo mặc định khởi tạo bất kỳ biến thể hiện chưa được khởi tạo nào với các giá trị mặc định.

Trong chương trình trên, các biến a và b được khởi tạo với giá trị mặc định lần lượt là 0 và false.

Đoạn chương trình trên tương đương với:

class Main {

  int a;
  boolean b;

   Main() {
    a = 0;
    b = false;
  }

  public static void main(String[] args) {
    // call the constructor
    Main obj = new Main();

    System.out.println("Default Value:");
    System.out.println("a = " + obj.a);
    System.out.println("b = " + obj.b);
  }
}

Đầu ra của chương trình giống như Ví dụ 5.

Constructors Overloading trong Java

Tương tự như overloading phương thức trong Java, chúng ta cũng có thể tạo hai hoặc nhiều hàm tạo với các tham số khác nhau. Điều này được gọi là quá tải hàm tạo.

Ví dụ 6: overloading Constructors Java

class Main {

  String language;

  // constructor with no parameter
  Main() {
    this.language = "Java";
  }

  // constructor with a single parameter
  Main(String language) {
    this.language = language;
  }

  public void getName() {
    System.out.println("Programming Langauage: " + this.language);
  }

  public static void main(String[] args) {

    // call constructor with no parameter
    Main obj1 = new Main();

    // call constructor with a single parameter
    Main obj2 = new Main("Python");

    obj1.getName();
    obj2.getName();
  }
}

Trong ví dụ trên, chúng ta có hai hàm tạo: Main() và Main(String language). Ở đây, cả hàm khởi tạo đều khởi tạo giá trị của biến ngôn ngữ với các giá trị khác nhau.

Dựa trên tham số được truyền trong quá trình tạo đối tượng, các hàm tạo khác nhau được gọi và các giá trị khác nhau được gán.

Quy tắc và lưu ý khi sử dụng Constructors

Khi sử dụng Constructors trong Java, có một số quy tắc và lưu ý quan trọng mà bạn nên lưu ý. Dưới đây là một số quy tắc và lưu ý khi sử dụng Constructors:

  1. Đặt tên Constructors:
    • Tên của Constructors nên trùng với tên của lớp mà nó thuộc về.
    • Tên Constructors nên được viết hoa chữ cái đầu tiên và tuân theo quy tắc đặt tên camelCase.
  2. Sự kế thừa Constructors:
    • Constructors không được kế thừa từ lớp cha cho lớp con.
    • Tuy nhiên, lớp con có thể gọi Constructors của lớp cha bằng từ khóa super() để khởi tạo các thuộc tính của lớp cha.
  3. Overloading Constructors:
    • Bạn có thể định nghĩa nhiều Constructors khác nhau trong cùng một lớp bằng cách sử dụng overloading.
    • Overloading Constructors cho phép bạn tạo ra nhiều cách khởi tạo đối tượng với các tham số khác nhau.
  4. Constructors mặc định (Default Constructors):
    • Nếu bạn không định nghĩa bất kỳ Constructors nào, Java sẽ tự động tạo một Constructors mặc định không tham số cho lớp.
    • Constructors mặc định chỉ khởi tạo các thuộc tính mặc định và không thực hiện bất kỳ thao tác nào khác.
  5. Constructors private (Private Constructors):
    • Constructors có thể được đặt là private để ngăn chặn việc tạo đối tượng từ bên ngoài lớp.
    • Private Constructors thường được sử dụng trong các lớp util hoặc lớp singleton.
  6. Sử dụng this() và super():
    • Từ khóa this() được sử dụng để gọi Constructors khác trong cùng lớp hiện tại.
    • Từ khóa super() được sử dụng để gọi Constructors của lớp cha.
  7. Lưu ý về Constructors:
    • Constructors không trả về giá trị, ngay cả kiểu void.
    • Constructors có thể có các tham số và thực hiện các thao tác khởi tạo ban đầu cho đối tượng.
    • Constructors có thể sử dụng các biến cục bộ và các biến thành viên của lớp.

Lưu ý rằng các quy tắc và lưu ý trên chỉ là một số khái niệm cơ bản. Khi sử dụng Constructors, hãy tuân thủ quy tắc lập trình Java và sử dụng một cách hợp lý để tạo và khởi tạo đối tượng.

Xem thêm Hàm khởi tạo(constructor) là gì?

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now