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.

Lưu ý quan trọng về Java Constructor

  • Constructor được gọi ngầm khi bạn khởi tạo các đối tượng.
  • Hai quy tắc để tạo hàm tạo là:
    • Tên của hàm tạo phải giống với tên của lớp.
    • Hàm tạo Java không được có kiểu trả về.
  • Nếu một lớp không có hàm tạo, trình biên dịch Java sẽ tự động tạo một hàm tạo mặc định trong thời gian chạy. Hàm tạo mặc định khởi tạo các biến thể hiện với các giá trị mặc định. Ví dụ, biến int sẽ được khởi tạo thành 0
  • Các loại hàm tạo:
    • No-Arg Constructor – một hàm tạo không chấp nhận bất kỳ đối số nào
    • Parameterized Constructor – một hàm tạo chấp nhận các đối số
    • Default Constructor – một hàm tạo được trình biên dịch Java tự động tạo nếu nó không được xác định rõ ràng.
  • Một hàm tạo không thể trừu tượng hoặc tĩnh hoặc cuối cùng.
  • Một hàm tạo có thể bị quá tải nhưng không thể bị ghi đè.

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.

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