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

Trong Java, Constructor (hay có cách gọi khác là hàm tạo) là một khối mã cũng giống như phương pháp. Nó được gọi khi một trổ tài của class được tạo. Tại thời điểm gọi hàm tạo, bộ nhớ lưu trữ giành riêng cho đối tượng được phân bổ.

Hàm tạo (Constructor) trong Java

Nó là một loại phương pháp đặ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 dùng keyword new(), có tối thiểu 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 như không có hàm tạo nào trong class. Trong trường hợp như thế, trình biên dịch Java phân phối 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ố.

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

1. Nguyên tắc để tạo Hàm tạo

Có 3 nguyên 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 và cụ thể
  • Một hàm tạo Java chẳng thể abstract, static, final & được ăn khớp hóa

Chú ý: Tất cả chúng ta có thể sử dụng các keyword sửa đổi truy cập (access modifier) trong khi khai báo một hàm tạo. Nó kiểm tra việc tạo đối tượng. Nói cách khác, tất cả chúng ta 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

<class_namevàgt;(){}  

3.2. Chẳng hạn về hàm tạo mặc định

Trong chẳng hạn 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 điểm tạo đối tượng.

//Java Program to create and call α 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 ɓ = new Bike1();
  }
}

Kết quả:

Bike1 được tạo

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

Xem Thêm  Thuộc tính HTML pattern - chỉ các chữ cái đầu vào html

3.3. Chẳng hạn về hàm tạo mặc định hiển thị giá trị mặc định

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

  // Phương pháp hiển thị id & 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 auto phân phối cho bạn một hàm tạo mặc định. Bước này giá trị 0 & null được phân phối bởi hàm tạo mặc định.

4. Hàm tham số

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

4.1. Chẳng hạn về hàm tạo tham số

Trong chẳng hạn này, http://phptravels.vn/ đã tạo ra hàm tạo của class Student có hai tham số. Tất cả chúng ta có thể có nhiều tham số.

// Chẳng hạn 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 ι, String и){  
    id = ι;
    name = и;
  }  
  
  // Phương pháp hiển thị giá trị  
  void display(){System.out.println(id+" "+name);}  
   
  public static void main(String args[]){
    // Tạo đối tượng & truyền giá trị
    Student4 s1 = new Student4(17,"Hải");
    Student4 s2 = new Student4(18,"Doanh");
 
    // Gọi phương pháp 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 có thể bị quá tải (overloading) như các phương pháp trong Java.

Xem Thêm  Python với câu lệnh mở: Hướng dẫn đơn giản - mở trong python

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 mục lục tham số khác nhau.

Chúng được sắp đặt theo cách mà mỗi constructor hiện một bổ phận khác nhau.

Chúng được trình biên dịch phân biệt bởi số lượng tham số trong & kiểu tham số của chúng.

5.1. Chẳng hạn về Constructor Overloading trong Java

// Chương trình chẳng hạn 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 ι,String и){
    id = ι;
    name = и;
  }

  // Tạo hàm tạo với 3 tham số 
  Student5(int ι, String и, int α){
    id = ι;
    name = и;
    age = α;
  }

  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ự độc đáo giữa Constructor & Method trong Java

Có nhiều sự độc đáo giữa các constructor & method:

Java ConstructorJava MethodMột constructor được sử dụng để khởi tạo tình trạng của một đối tượng.Một phương pháp đượ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 pháp cần phải có kiểu trả vềConstructor được gọi ngầm & rõ ràngMột phương pháp được gọi rõ ràngTrình biên dịch Java phân phối một Constructor mặc định nếu như không có constructor nào được tạoKhông có phương pháp nào được phân phối bởi trình biên dịchTên của constructor phải giống với tên của classTên phương pháp thì có thể giống hoặc khác tên class

7. Sao chép Constructor trong Java

Không sao chép được constructor trong Java. Bên cạnh đó, tất cả chúng ta có thể copy các giá trị từ đối tượng này sang đối tượng khác như constructor trong ₵ ++.

Có nhiều phương pháp để copy các giá trị của một đối tượng vào một đối tượ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 pháp clone() của class Object

Trong chẳng hạn này, tất cả chúng ta sẽ copy các giá trị của một đối tượng sang đối tượng khác bằng cách dùng hàm tạo trong Java.

// Chẳng hạn copy 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 ι, String и){  
    id = ι;  
    name = и;  
  }  
  // 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ì?

Xem Thêm  Tạo các tệp HTML cơ bản - cách tạo tệp html

Giải đáp: Hàm tạo mặc định được sử dụng để phân phối các giá trị mặc định cho đối tượng như 0, null, ?.?., tùy vào vào loại.

Hỏi #2: Mục đích của hàm tạo tham số là gì?

Giải đáp: Hàm tạo tham số được sử dụng để phân phối các giá trị khác nhau cho các đối tượng tách biệt. Bên cạnh đó, bạn cũng có thể phân phối các giá trị tương đương.

Hỏi #3: Liệu constructor có trả về giá trị nào không?

Giải đáp: Có, này là trổ tài của lớp hiện giờ (Bạn chẳ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 bổ phận khác thay vì khởi tạo?

Giải đáp: Có, giống như tạo đối tượng, khởi đầu một luồng, gọi một phương pháp, ?.?. Bạn có thể thực hiện bất kỳ thao tác nào trong hàm tạo khi bạn thực hiện trong phương pháp.

Hỏi #5: Có class Constructor trong Java không?

Giải đáp: Có

Hỏi #6: Mục đích của class Constructor là gì?

Giải đáp: Java phân phối một class Constructor 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ư thế là trong bài này bạn đã được tìm hiểu khá đầy đủ về constructor (hàm tạo) trong Java. & sau này, tất cả chúng ta sẽ thường xuyên sử dụng chúng trong lập trình.

Xem thêm:

Hãy chú ý nhé. Chúc bạn học Java tốt!

JavaDEV

Viết một bình luận