Tất tần tật về Constructor trong JAVA

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 Fullstacktại NIIT – ICT TP.HN. Tất cả sẽ được học trong Khóa giảng dạy liên tục 4-5 tháng này !

Ok, giờ đây tất cả chúng ta hãy liên 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ó hoàn toà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.

Tên của constructor trùng với tên của class.

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


ClassName(){}
 

> Lưu ý: 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ể thiết lập các giá trị ban đầu cho các thuộc tính của đối tượng.

Ví dụ:


class ConstructorDemo

{

    / / Constructor

    ConstructorDemo(){

        System.out.println(” Đây là hàm constructor “);

}

    public static void main(String args[]){

        / / Tạo đối tượng người dùng mới

        ConstructorDemo a = new ConstructorDemo();

}

}
 

Kết quả :


Đây là hàm constructor
 

> Lưu ý: Hàm constructor trong Java tự động được gọi khi đối tượng được tạo

 

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 {

    / / Thuộc tính

    int id;

    String name;

    / / Constructor có tham số

    ParaConst(int i, String n) {

        id = i;

        name = n;

}

    / / Phương thức

    void display(){

        System.out.println(id + ” ” + name);

}

    public static void main(String args[]) {

        / / Tạo đối tượng người dùng

        ParaConst s1 = new ParaConst(121, ” NIIT “);

        ParaConst s2 = new ParaConst(232, ” ICT TP.HN “);

        / / Gọi phương pháp

        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 code sau demo constructor overloading trong Java:

 


class OverloadConst{

    int id;

    String name;

    int age;

    / / Constructor có 2 tham số

    OverloadConst(int i,String n){

        id = i;

        name = n;

}

    / / Constructor có 3 tham số

    OverloadConst(int i, String n, int a){

        id = i;

        name = n;

        age = a;

}

    / / Phương thức

    void display(){

        System.out.println(id + ” ” + name + ” ” + age);

}

    public static void main(String args[]){

        / / Tạo đối tượng người tiêu dùng và truyền vào 2 tham số

        OverloadConst s1 = new OverloadConst(121, ” NIIT “);

        / / Tạo đối tượng người dùng và truyền vào 3 tham số

        OverloadConst s2 = new OverloadConst(232, ” ICT Thành Phố Hà Nội “, 20);

        / / Gọi phương pháp

        s1.display();

        s2.display();

}

}
 


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

 


121 NIIT 0
232 ICT Hà Nội 20
 

> Lưu ý: 0 là giá trị mặc định của kiểu int


 

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 pháp 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 những giá trị của một đối tượng người tiêu dùng cho đối tượng người dùng khác
  • hoặc sử dụng phương pháp clone ( ) của Object class

Đoạn code 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;

    / / Constructor 2 tham số

    Copy(int i, String n){

        id = i;

        name = n;

}

    / / Constructor

    Copy(Copy s){

        id = s.id;

        name = s.name;

}

    / / Phương thức

    void display(){

        System.out.println(id + ” ” + name);

}

    public static void main(String args[]){

        / / Tạo đối tượng người tiêu dùng

        Copy s1 = new Copy(121, ” NIIT “);

        Copy s2 = new Copy(s1);

        / / Gọi phương pháp

        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 hề 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ề bộc lộ 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 pháp
  • 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

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?

> Đọc thêm: Constructor trong JavaScriptNếu bạn muốn khám phá kỹ hơn vềcũng như muốn nắm giữ tuyệt kỹ chinh phục nhiều ngôn từ lập trình hơn ?

HỌC VIỆN ĐÀO TẠO CNTT NIIT – ICT HÀ NỘI

Học Lập trình chất lượng cao ( Since 2002 ). Học trong thực tiễn + Tuyển dụng ngay !

Đc : Tầng 3, 25T2, N05, Nguyễn Thị Thập, CG cầu giấy, Thành Phố Hà Nội

SĐT : 02435574074 – 0383.180086

E-Mail : [email protected]

Fanpage: https://facebook.com/NIIT.ICT/

# niit # icthanoi # niithanoi niiticthanoi # hoclaptrinh # khoahoclaptrinh # hoclaptrinhjava # hoclaptrinhphp # java # php # python