Constructor trong java với ví dụ cụ thể

Constructor là một method đặc biệt được sử dụng để khởi tạo một đối tượng trong Java. Constructor có tên trùng với tên class, nhưng sẽ có nhiều override method khác nhau. 

public class Person {
   // contructor
    Person() {}
}

Constructor hoạt động như thế nào?

Từ khoá new

Để làm rõ vấn đề này, giả sử chúng ta cần tạo mới một đối tượng Person

Person person = new Person();

Từ khoá new tạo ra một object của Person, nó sẽ gọi constructor của Person để khởi tạo object.

Ví dụ Khởi tạo Person object với name = “shareprogramming.net”

public class Person {
    String name;

    //Constructor
    Person() {
        this.name = "shareprogramming.net";
    }
}

Tiến hành kiểm thử giá trị của name sau khi khởi tạo

public class Main {
    public static void main(String[] args) {
        Person obj = new Person();
        System.out.println(obj.name);
    }
}

output: shareprogramming.net

Sơ đồ hoạt động

constructor trong java (constructor in java)

Các loại Constructor 

Trong Java, với một class bất kỳ chúng ta có các loại sau:

  • Default
  • No-arg
  • Parameterized

Default constructor

Nếu chúng ta triển khai 1 class không chứa bất kỳ một constructor nào thì trình biên dịch sẽ tự động thêm default constructor cho class đó.

constructor default

Constructor mặc định không nhận bất kỳ tham số nào cũng không chứa mã triển khai bên trong.

No – arg Constructor

No-arg constructor là 1 constructor không nhận bất kỳ một tham số nào, điểm khác biệt duy nhất với default constructor nó bên trong no-arg constructor có chứa mã triển khai.

class DemoDefault {
    DemoDefault() {
        System.out.println("Toi da duoc khoi tao");
    }
}
public  class Main {
    public static void main(String[] args) {
        DemoDefault example = new DemoDefault();
    }
}

Output: Toi da duoc khoi tao

Sử dụnng no-arg constructor để khởi tạo giá trị mặc định cho các thuộc tính của object, hoặc làm một số tác vụ khác như là logger, lấy dữ liệu từ bên ngoài etc.

Parameterized Constructor

Constructor có ít nhất một tham số đầu vào gọi là parameterized constructor. 

Ví dụ NhanVien class chứa parameterized constructor nhận 2 tham số đầu vào idname.

public class NhanVien {

   int Id;  
   String name;  
	    
   NhanVien(int id, String name){  
       this.Id = id;  
       this.name = name;  
   }  
   void info(){
        System.out.println("Id: "+Id+" Name: "+name);
   }
}
public class Main {
    public static void main(String[] args) {
        NhanVien obj1 = new NhanVien(1,"Hai");  
	NhanVien obj2 = new NhanVien(1,"Tuan");  
	obj1.info();  
	obj2.info();
    }
}

Output:

Id: 1 Name: Hai
Id: 2 Name: Tuan

This keyword

Ở các ví dụ dụ trên, từ khóa this được sử dụng rất nhiều, vậy các bạn đặt câu hỏi là tại sao lại dùng nó không?

Từ khoá this được dùng để tham chiếu đến instance hiện tại của class.

public class NhanVien {

   int Id;  
   String name;  
	    
   NhanVien(int id, String name){  
       this.Id = id;  
       this.name = name;  
   }  
}

Ngoài ra, chúng ta có thể dùng từ khoá this với các trường hợp sau

  • Tham chiếu biến instance của class
  • Tham chiếu đến các method của class
  • this để gọi constructor
  • this có thể sử dụng như một tham số của method
  • this có thể sử dụng như một tham số của constructor
  • Dùng this để trả về object class instance

Khác nhau giữa constructor và method

Constructor và method vốn là 2 khái niệm khác nhau, nhưng vì cách viết của constructor khá giống với method nên mình sợ các bạn nhầm lẫn, mình sẽ đưa ra những điểm khác nhau cơ bản giữa chúng.

  • Mục đích của constructor là để khởi tạo một object trong khi đó method thực thi các nhiệm vụ để đáp ứng nhu cầu của một object chứa nó.
  • Constructor không có kết quả trả về còn method thì có.
  • Constructor không thể đi cùng với các từ khoá abstract, final, static etc, method thì được.

Tóm tắt 

  • Mọi class java thông thường đều có constructor ngoại trừ abstract class và interface.
  • Constructor không phải là method và không có kiểu trả về.
  • Constructor có tên trùng với tên class.
  • Constructor có 3 kiểu chính: default, no-arg, parameterized.
  • Nếu bạn implement một class mà không thêm bất kỳ một constructor nào thì trình biên dịch sẽ tự động thêm constructor mặc định cho class đó.
  • Từ khóa this dùng để tham chiếu đến class instance hiện tại.

Nguồn tham khảo

https://www.geeksforgeeks.org/constructors-in-java/

https://beginnersbook.com/2013/03/constructors-in-java/

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x