Tìm hiểu về Hàm tạo (Constructor) trong Java | JAVA DEV

Trong Java, Constructor (hay còn gọi là hàm tạo) là một khối mã tương tự như phương thức. Nó được gọi khi một thể hiện của class được tạo. Tại thời điểm gọi hàm tạo, bộ nhớ dành cho đối tượng được phân bổ.

Hàm tạo (Constructor) trong JavaHàm tạo (Constructor) trong Java

Nó là một loại phương thức đặc biệt được sử dụng để khởi tạo đối tượng.

Mỗi khi một đối tượng được tạo bằng cách sử dụng từ khóa new(), có ít nhất một hàm tạo được gọi.

Nó gọi một hàm tạo mặc định (default constructor) nếu không có hàm tạo nào trong class. Trong trường hợp như vậy, trình biên dịch Java cung cấp một hàm tạo mặc định theo mặc định.

Có hai loại hàm tạo trong Java :

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

Lưu ý : Nó được gọi là hàm tạo ( constructor ) vì nó kiến thiết xây dựng những giá trị tại thời gian tạo đối tượng người dùng. Không thiết yếu phải viết một constructor cho một class. Đó là chính bới trình biên dịch java tạo ra một hàm tạo mặc định nếu class của bạn không có .

1. Quy tắc để tạo Hàm tạo

Có 3 quy tắc để tạo ra một hàm tạo :

  • Tên hàm tạo phải giống với tên class của nó
  • Một hàm tạo phải không có kiểu trả về rõ ràng
  • Một hàm tạo Java không thể abstract, static, final và được đồng bộ hóa

Lưu ý : Chúng ta hoàn toàn có thể sử dụng những từ khóa sửa đổi truy vấn ( access modifier ) trong khi khai báo một hàm tạo. Nó trấn áp việc tạo đối tượng người dùng. Nói cách khác, tất cả chúng ta hoàn toàn có thể có hàm tạo private, protected, public hoặc mặc định trong Java .

2. Các loại Hàm tạo

Có 2 loại hàm tạo trong Java :

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

3. Hàm tạo mặc định

Hàm tạo được gọi là Hàm tạo mặc định (Default Constructor) khi nó không có bất kỳ tham số nào.

3.1. Cú pháp hàm tạo mặc định

(){}  

3.2. Ví dụ về hàm tạo mặc định

Trong ví dụ này, tất cả chúng ta đang tạo hàm tạo không có đối số trong class Bike1. Nó sẽ được gọi vào thời gian tạo đối tượng người dùng .

//Java Program to create and call a default constructor  
class Bike1{ 
  // Tạo hàm tạo mặc định 
  Bike1(){
    System.out.println("Bike1 được tạo");
  }  
  //main method
  public static void main(String args[]){  
    // Gọi hàm tạo mặc định  
    Bike1 b = new Bike1();
  }
}

Kết quả :

Bike1 được tạo

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

3.3. Ví dụ về hàm tạo mặc định hiển thị giá trị mặc định

// Hãy thử một ví dụ hàm tạo khác  
// để tạo hiển thị giá trị mặc định 
class Student3{
  int id;  
  String name;

  // Phương thức hiển thị id và name
  void display(){
    System.out.println(id+" "+name);
  }  
  
  public static void main(String args[]){  
  // Tạo đối tượng 
    Student3 s1=new Student3();  
    Student3 s2=new Student3();  
  // Hiển thị giá trị của đối tượng  
    s1.display();  
    s2.display();  
  }  
} 

Kết quả :

0 null
0 null

Giải thích : Trong class Student3 trên, bạn không tạo bất kể hàm tạo nào để trình biên dịch tự động hóa cung ứng cho bạn một hàm tạo mặc định. Ở đây giá trị 0 và null được cung ứng bởi hàm tạo mặc định .

4. Hàm tham số

Hàm tạosố lượng tham số cụ thể được gọi là hàm tạo tham số.

4.1. Ví dụ về hàm tạo tham số

Trong ví dụ này, chúng tôi đã tạo ra hàm tạo của class Student có hai tham số. Chúng ta hoàn toàn có thể có nhiều tham số .

// Ví dụ về hàm tạo tham số trong Java.  
class Student4{
  int id;
  String name;

  // Tạo một hàm tạo tham số 
  Student4(int i, String n){  
    id = i;
    name = n;
  }  
  
  // Phương thức hiển thị giá trị  
  void display(){System.out.println(id+" "+name);}  
   
  public static void main(String args[]){
    // Tạo đối tượng và truyền giá trị
    Student4 s1 = new Student4(17,"Hải");
    Student4 s2 = new Student4(18,"Doanh");
 
    // Gọi phương thức hiển thị dữ liệu
    s1.display();
    s2.display();
  }  
}  

Kết quả :

17 Hải
18 Doanh

5. Constructor Overloading trong Java

Trong Java, một hàm tạo giống như một phương pháp nhưng không có kiểu trả về. Nó cũng hoàn toàn có thể bị quá tải ( overloading ) như những phương pháp trong Java .

Constructor Overloading trong Java là một kỹ thuật có nhiều hơn một hàm tạo với các danh sách tham số khác nhau.

Chúng được sắp xếp theo cách mà mỗi constructor hiện một trách nhiệm khác nhau .
Chúng được trình biên dịch phân biệt bởi số lượng tham số trong và kiểu tham số của chúng .

5.1. Ví dụ về Constructor Overloading trong Java

// Chương trình ví dụ về Constructor Overloading trong Java 
class Student5{
  int id;
  String name;
  int age;

  // Tạo hàm tạo với 2 tham số 
  Student5(int i,String n){
    id = i;
    name = n;
  }

  // Tạo hàm tạo với 3 tham số 
  Student5(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[]){
    Student5 s1 = new Student5(17,"Hải");
    Student5 s2 = new Student5(18,"Doanh", 21);
    s1.display();
    s2.display();
  }
}

Kết quả

17 Hải 0
18 Doanh 21

6. Sự khác biệt giữa Constructor và Method trong Java

Có nhiều sự độc lạ giữa những constructor và method :

Java Constructor Java Method
Một constructor được sử dụng để khởi tạo trạng thái của một đối tượng. Một phương thức được sử dụng để làm hành vi của một đối tượng.
Một constructor không được có kiểu trả về. Một phương thức phải có kiểu trả về
Constructor được gọi ngầm và rõ ràng Một phương thức được gọi rõ ràng
Trình biên dịch Java cung cấp một Constructor mặc định nếu không có constructor nào được tạo Không có phương thức nào được cung cấp bởi trình biên dịch
Tên của constructor phải giống với tên của class Tên phương thức thì có thể giống hoặc khác tên class

7. Copy Constructor trong Java

Không copy được constructor trong Java. Tuy nhiên, tất cả chúng ta hoàn toàn có thể sao chép những giá trị từ đối tượng người dùng này sang đối tượng người dùng khác như constructor trong C + + .
Có nhiều cách để sao chép những giá trị của một đối tượng người tiêu dùng vào một đối tượng người tiêu dùng khác trong Java :

  • Bằng constructor
  • Bằng cách gán các giá trị của một đối tượng vào một đối tượng khác
  • Theo phương thức clone() của class Object

Trong ví dụ này, tất cả chúng ta sẽ sao chép những giá trị của một đối tượng người tiêu dùng sang đối tượng người dùng khác bằng cách sử dụng hàm tạo trong Java .

// Ví dụ sao chép giá trị của một đối tượng sang đối tượng khác  
class Student6{  
  int id;  
  String name;  
  
  // Hàm tạo
  Student6(int i, String n){  
    id = i;  
    name = n;  
  }  
  // Hàm tạo để khởi tạo một đối tượng khác
  Student6(Student6 s){
    id = s.id;
    name =s.name;
  }
  
  void display(){System.out.println(id+" "+name);}  
   
  public static void main(String args[]){  
    Student6 s1 = new Student6(17,"Hải");  
    Student6 s2 = new Student6(s1);  
    s1.display();
    s2.display();  
  }  
} 

Kết quả :

17 Hải
17 Hải

Hỏi #1: Mục đích của hàm tạo mặc định là gì? Trả lời : Hàm tạo mặc định được sử dụng để phân phối những giá trị mặc định cho đối tượng người dùng như 0, null, v.v., tùy thuộc vào loại. Hỏi #2: Mục đích của hàm tạo tham số là gì? Trả lời : Hàm tạo tham số được sử dụng để phân phối những giá trị khác nhau cho những đối tượng người tiêu dùng riêng không liên quan gì đến nhau. Tuy nhiên, bạn cũng hoàn toàn có thể cung ứng những giá trị tựa như. Hỏi #3: Liệu constructor có trả về giá trị nào không?

Trả lời: Có, đó là thể hiện của lớp hiện tại (Bạn không thể sử dụng kiểu trả về nhưng nó trả về một giá trị).

Hỏi #4: Constructor có thể thực hiện các nhiệm vụ khác thay vì khởi tạo? Trả lời : Có, giống như tạo đối tượng người dùng, mở màn một luồng, gọi một phương pháp, v.v. Bạn hoàn toàn có thể triển khai bất kể thao tác nào trong hàm tạo khi bạn thực thi trong phương pháp. Hỏi #5: Có class Constructor trong Java không? Trả lời : Có Hỏi #6: Mục đích của class Constructor là gì? Trả lời : Java cung ứng một class Constructor hoàn toàn có thể được sử dụng để lấy thông tin nội bộ của constructor trong class. Bạn sẽ thấy nó trong package java.lang.reflect.

Lời kết

Như vậy là trong bài này bạn đã được tìm hiểu khá đầy đủ về constructor (hàm tạo) trong Java. Và sau này, chúng ta sẽ thường xuyên sử dụng chúng trong lập trình.

Tham khảo thêm :
Hãy chú ý quan tâm nhé. Chúc bạn học Java tốt !

JavaDEV