Constructor là gì?

Constructor trong Java (Hàm tạo trong Java) là một block code được gọi khi một thể hiện của một đối tượng được tạo và bộ nhớ được cấp phát cho đối tượng đó.

Constructor là một loại phương thức đặc biệt được sử dụng để khởi tạo một đối tượng. Bạn cũng có thể sử dụng access modifiers trong khi khai báo Constructor.

Constructor trong Java

Constructor trong Java

Constructor là một phần quan trọng phải hiểu để có thể học lập trình Java hiệu quả. Vì vậy, để bắt đầu, hãy đến với các Quy tắc tạo Constructor trong Java.

Hey!!

> Nếu muốn hiểu rõ tất cả về Java? Hãy tham gia ngay Khóa học Java Fullstack tại NIIT – ICT Hà Nội. Tất cả sẽ được học trong Khóa đào tạo liên tục 6 tháng này!

Ok, bây giờ chúng ta hãy tiếp tục bài viết…

Các Quy tắc để tạo Constructor trong Java

  • Một Constructor trong Java phải có kiểu trả về rõ ràng
  • Nó có thể là abstract, final, static, or synchronized
  • Tên của Constructor phải giống với tên class của nó


Các kiểu Constructor trong Java

Trong Java thì có 2 kiểu Constructor

1. Default Constructor hoặc no-arg Constructor (Hàm khởi tạo mặc định)

Default Constructor là hàm khởi tạo không có tham số. Đây là lý do tại sao nó còn được gọi là no-arg Constructor.

Cú pháp chung của Default Constructor trong Java là:

<class_name>(){}

Lưu ý là nếu không có hàm constructor được định nghĩa trong class Java, thì trình biên dịch Java sẽ tự động tạo một hàm constructor mặc định cho class đó.

Tùy thuộc vào loại đối tượng, hàm constructor mặc định cung cấp các giá trị mặc định cho đối tượng.

Hạn chế của việc sử dụng một hàm constructor mặc định được javac tạo tự động là sau đó chúng ta không thể đặt các giá trị ban đầu cho các thuộc tính của đối tượng.

Ví dụ:

class ConstructorDemo
{
  ConstructorDemo(){
    System.out.println("The Constructor is created successfully!");
  }
  public static void main(String args[]){
    ConstructorDemo a = new ConstructorDemo();
  }
}

Kết quả:

The constructor is created successfully!

2. Parameterized Constructor (Hàm khởi tạo có tham số)

Bất kỳ hàm Constructor nào có tham số được gọi là Parameterized Constructor.

Mặc dù một Parameterized Constructor thường được sử dụng để cung cấp các giá trị riêng biệt cho các đối tượng Java khác nhau, nhưng nó cũng có thể cung cấp cùng các giá trị cho các đối tượng Java khác nhau.

Ví dụ:

class ParaConst {
  int id;
  String name;
  ParaConst(int i, String n) {
    id = i;
    name = n;
  }
  void display(){
    System.out.println(id + " " + name);
  }
  public static void main(String args[]) {
    ParaConst s1 = new ParaConst(121, "NIIT");
    ParaConst s2 = new ParaConst(232, "ICT Hà Nội");
    s1.display();
    s2.display();
  }
}

Kết quả:

121 NIIT
232 ICT Hà Nội

Constructor Overloading (Nạp chồng) trong Java là gì?



Giống như các phương thức trong Java, Constructor trong Java cũng có thể Overload.


Với Constructor overloading, chúng ta có thể có cùng hàm constructor nhưng với các danh sách tham số khác nhau. Tất cả chúng được sắp xếp theo cách khác nhau để thực hiện những nhiệm vụ riêng biệt.


Trình biên dịch Java phân biệt giữa các overload constructor theo tổng số tham số trong danh sách và kiểu của chúng.


Đoạn mã code sau demo constructor overloading trong Java:

 

class OverloadConst{
  int id;
  String name;
  int age;
  OverloadConst(int i,String n){
    id = i;
    name = n;
  }
  OverloadConst(int i, String n, int a){
    id = i;
    name = n;
    age = a;
  }
  void display(){
    System.out.println(id + " " + name + " " + age);
  }
  public static void main(String args[]){
    OverloadConst s1 = new OverloadConst(121, "NIIT");
    OverloadConst s2 = new OverloadConst(232, "ICT Hà Nội",25);
    s1.display();
    s2.display();
  }
}



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

 

121 NIIT 0
232 ICT Hà Nội 25

Constructor vs Method trong Java.



Java method là một đoạn code có tên cụ thể. Nó có thể được gọi ở bất kỳ vị trí nào trong chương trình bằng cách sử dụng tên của nó.


Java method cũng có thể được hiểu là một chương trình con hoạt động trên dữ liệu và trả về một số giá trị.


Java constructor là một loại phương thức đặc biệt. Cả hai đều giống nhau theo nhiều cách, nhưng lại không phải là một.

 

Dưới đây là một số khác biệt quan trọng nhất giữa Java constructor và Java method:

  • Invoking: Trong khi constructor được gọi ngầm, phương thức lại được gọi rõ ràng
  • Java compiler: Trình biên dịch Java không bao giờ cung cấp một phương thức. Tuy nhiên, trình biên dịch Java cung cấp một constructor mặc định nếu không có một cái nào được định nghĩa trong class.
  • Cách đặt tên: Tên của constructor trong Java phải giống với tên của class. Tuy nhiên, phương thức có thể cùng tên với class chứa nó hoặc không.
  • Số lần gọi: Một hàm constructor được gọi một lần và chỉ trong thời gian tạo đối tượng. Mặt khác, một phương thức Java có thể được gọi là nhiều lần.
  • Kiểu trả về: Một phương thức Java phải có kiểu trả về nhưng có cùng kiểu với hàm constructor hay không thì không bắt buộc.
  • Cách sử dụng: Trong khi một phương thức được sử dụng để phơi bày hành vi của một đối tượng Java, thì một hàm constructor được sử dụng để khởi tạo trạng thái giống nhau.

Copy Constructor trong Java

Mặc dù không có điều khoản nào để copy constructor trong Java, nhưng có thể sao chép các giá trị từ một đối tượng Java sang đối tượng khác giống như sử dụng một hàm copy constructor trong C ++. 

Khác với việc sử dụng hàm constructor để sao chép giá trị từ đối tượng này sang đối tượng khác, điều tương tự cũng có thể được thực hiện bằng cách:

  • Gán các giá trị của một đối tượng cho đối tượng khác
  • hoặc sử dụng phương thức clone() của Object class

Đoạn mã sau sẽ giúp bạn hiểu:

Cách copy giá trị từ đối tượng này sang đối tượng khác trong Java.

class Copy{
  int id;
  String name;
  Copy(int i,String n){
    id = i;
    name = n;
  }
  Copy(Copy s){
    id = s.id;
    name = s.name;
  }
  void display(){
    System.out.println(id + " " + name);
  }
  public static void main(Strong args[]){
    Copy s1 = new Copy(121, ”NIIT”);
    Copy s2 = new Coopy(s1);
    s1.display();
    s2.display();
  }
}

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

121 NIIT
121 NIIT



Một số câu hỏi thường gặp về Constructor trong Java

Câu hỏi 1: Liệu constructor có trả về giá trị nào không?

Trả lời:

Mặc dù bạn không thể sử dụng kiểu trả về với Java constructor, nhưng nó trả về một giá trị. Một hàm tạo Java trả về thể hiện của clalss hiện tại.

Câu hỏi 2: Constructor Chaining trong Java là gì?

Trả lời:

Constructor Chaining là một kỹ thuật gọi hàm constructor từ một số hàm constructor khác trong lập trình Java.

Trong khi phương thức this() được sử dụng để gọi cùng một hàm constructor của class, thì phương thức super() được sử dụng để gọi hàm constructor của class bậc trên.

Câu hỏi 3: Có thể gọi hàm constructor của class con từ hàm constructor của class bậc trên trong Java không?

Trả lời: Không

Câu hỏi 4: Trong Java có các hàm destructor không?

Trả lời:

Java không có các hàm destructor vì không thể dự đoán khi nào một đối tượng sẽ bị phá hủy trong Java.

Câu hỏi 5: Những tác vụ nào khác ngoài khởi tạo có thể được thực hiện bởi một hàm constructor của Java?

Trả lời:

Một hàm constructor trong Java có thể thực hiện bất kỳ loại hành động nào có thể được thực hiện bằng một phương thức.

Một số tác vụ phổ biến nhất được thực hiện bằng cách sử dụng hàm constructor trong Java là:

  • Gọi một phương thức
  • Tạo object
  • Bắt đầu một luồng



Câu hỏi 6: Khi nào thì cần đến constructor overloading trong Java?

Trả lời:

Constructor Overloading được sử dụng trong Java thông thường khi có yêu cầu khởi tạo một đối tượng Java theo nhiều cách khác nhau.

Câu hỏi 7: Điều gì sẽ xảy ra nếu thêm một kiểu trả về cho hàm constructor trong Java?

Trả lời:

Lúc đó bạn sẽ lập tức nhận được cảnh báo “this method has a contructor name”.

Tổng kết

Đó, đó là tất cả về constructor trong Java. Học cách sử dụng hiệu quả constructor là một trong những bí quyết quan trọng chinh phục các ngôn ngữ lập trình cấp cao.

Để hiểu rõ hơn về những khái niệm khác ngoài constructor, bạn có thể đọc thêm bài viết Tự học Java (One for All) này!

Nếu bạn muốn tìm hiểu kỹ hơn về Contructor cũng như muốn nắm giữ bí quyết chinh phục nhiều ngôn ngữ lập trình hơn?

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

Facebook