Chuyển đến nội dung chính

Java: Contructor và Destructor

Constructor được gọi khi chúng ta new một đối tượng (tức khởi tạo một đối tượng mới)
  • Constructor có tham số: dùng gán giá trị cho 1 object trực tiếp khi new một đối tượng
  • Constructor không tham số: new đối tượng và các thuộc tính của đối tượng này có giá trị mặc định, muốn gán giá trị mới thì phải dùng 1 method khác(ví dụ: setter,...)
  • Được chứ. Đây chỉ là method do Java tạo ra và khuyến cáo sử dụng, Nó giống như là một cái chuẩn chung cho các nhà lập trình. Bạn muốn khác biệt thì cứ việc không dùng nó.
    Mình hay dùng method Setter để bắt lỗi giá trị truyền vào cho object, ví dụ attribute age bạn muốn nó phải >= 18 nhưng người dùng nhập 10 thì sao?
    public void setAge(int new_Age)
    {
         if(new_Age >= 18)
              this.Age = new_Age;
         this.Age = 18;
    }
  • Một destructor là một hàm thành viên đặc biệt của một lớp mà được thực thi bất cứ khi nào một đối tượng của lớp đó ra khỏi phạm vi hoặc bất cứ khi nào biểu thức delete được áp dụng tới một con trỏ tới đối tượng của lớp đó.
Một destructor sẽ có cùng tên với lớp và được đặt trước bỏi ký hiệu ~ và nó có thể: không trả về một giá trị và không nhận bất kỳ tham số nào. Destructor có thể rất hữu ích để giải phóng resource trước khi thoát khỏi chương trình, ví dụ: đóng file, giải phóng bộ nhớ, …
Ví dụ sau giải thích khái niệm về destructor trong C++:
Với ví dụ trên ta có thể định nghĩa hàm hủy như sau:
?
1
2
3
4
5
DSSinhVien::~DSSinhVien()
{
   if (list != NULL)
      delete []list;
}
  • Câu hỏi: Mục đích của Constructor mặc định?

  • Constructor mặc định cung cấp các giá trị mặc định cho đối tượng như 0, null, … tùy thuộc vào kiểu dữ liệu.

    Ví dụ Constructor mặc định mà hiển thị các giá trị mặc định

    class Student3{  
    int id;  
    String name;  
      
    void display(){System.out.println(id+" "+name);}  
      
    public static void main(String args[]){  
    Student3 s1=new Student3();  
    Student3 s2=new Student3();  
    s1.display();  
    s2.display();  
    }  
    }   
    Giải thích: Trong lớp trên, bạn không tạo bất cứ Constructor nào, vì thế Compiler cung cấp cho bạn một Constructor mặc định. Ở đây các giá trị 0 và null được cung cấp bởi Constructor mặc định.
  • Câu hỏi: Tại sao sử dụng Constructor được tham số hóa?
    Constructor được tham số hóa được sử dụng để cung cấp các giá trị khác nhau cho các đối tượng riêng biệt.
    Ví dụ về Constructor được tham số hóa:
    Trong ví dụ này, chúng ta tạo Constructor của lớp Student mà có hai tham số. Chúng ta có thể có bất cứ số tham số nào trong Constructor.
    class Student4{  
        int id;  
        String name;  
          
        Student4(int i,String n){  
        id = i;  
        name = n;  
        }  
        void display(){System.out.println(id+" "+name);}  
       
        public static void main(String args[]){  
        Student4 s1 = new Student4(111,"Karan");  
        Student4 s2 = new Student4(222,"Aryan");  
        s1.display();  
        s2.display();  
       }  
    }   

    Nạp chồng Constructor trong Java

    Nạp chồng Constructor là một kỹ thuật trong Java mà trong đó một lớp có thể có bất cứ số lượng Constructor nào mà khác nhau về danh sách tham số. Trình biên dịch Compiler phân biệt sự khác nhau giữa các Constructor này bằng việc phân tích số tham số trong danh sách và kiểu của chúng.

    Ví dụ về nạp chồng Constructor

    class Student5{  
        int id;  
        String name;  
        int age;  
        Student5(int i,String n){  
        id = i;  
        name = n;  
        }  
        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(111,"Hoang");  
        Student5 s2 = new Student5(222,"Thanh",25);  
        s1.display();  
        s2.display();  
       }  
    }    
  • Copy Constructor trong Java

    Trong Java không có Copy Constructor như trong C++. Tuy nhiên, bạn có thể sao chép các giá trị của một đối tượng tới đối tượng khác. Có nhiều cách để thực hiện việc sao chép các giá trị, đó là:
    • Bởi Constructor
    • Bởi gán các giá trị của một đối tượng vào trong đối tượng khác.
    • Bởi phương thức clone() của lớp Object.
    Trong ví dụ này, chúng ta sao chép các giá trị của một đối tượng vào trong đối tượng khác bởi sử dụng Constructor trong Java.
    class Student6{  
        int id;  
        String name;  
        Student6(int i,String n){  
        id = i;  
        name = n;  
        }  
          
        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(111,"Hoang");  
        Student6 s2 = new Student6(s1);  
        s1.display();  
        s2.display();  
       }  
    }   

    Sao chép các giá trị mà không sử dụng Constructor

    Chúng ta có thể sao chép các giá trị của một đối tượng vào trong đối tượng khác bởi gán các giá trị của đối tượng đó vào trong đối tượng khác. Trong trường hợp này, chúng ta không cần tạo Constructor.
    class Student7{  
        int id;  
        String name;  
        Student7(int i,String n){  
        id = i;  
        name = n;  
        }  
        Student7(){}  
        void display(){System.out.println(id+" "+name);}  
       
        public static void main(String args[]){  
        Student7 s1 = new Student7(111,"Hoang");  
        Student7 s2 = new Student7();  
        s2.id=s1.id;  
        s2.name=s1.name;  
        s1.display();  
        s2.display();  
       }  
    }  
    Câu hỏi: Có phải Constructor trả về giá trị?
    Có, đó là instance (sự thể hiện) của lớp hiện tại. (bạn không thể sử dụng kiểu trả về, tuy vậy nó trả về một giá trị).
    Câu hỏi: Constructor có thể thực hiện các tác vụ khác ngoài khởi tạo không?
    Có, giống như quá trình tạo đối tượng, bắt đầu một Thread, gọi phương thức, … Bạn có thể thực hiện bất cứ hoạt động nào trong Constructor như khi bạn thực hiện trong phương thức.
  • Điểm khác nhau giữa Constructor và Phương thức trong Java

    Bảng dưới đây liệt kê một số điểm khác nhau giữa Constructor và phương thức trong Java:
    ConstructorPhương thức
    Constructor được sử dụng để khởi tạo trạng thái của một đối tượngPhương thức được sử dụng để trưng bày hành vi của một đối tượng
    Constructor phải không có kiểu trả vềPhương thức phải có kiểu trả về
    Constructor được triệu hồi một cách ngầm địnhPhương thức phải được triệu hồi một cách tường minh
    Compiler cung cấp một Constructor mặc định nếu bạn không có bất cứ Constructor nàoPhương thức không được cung cấp bởi Compiler trong bất cứ trường hợp nào
    Tên Constructor phải giống tên lớp

    Tên phương thức có thể hoặc không giống như tên lớp

Nhận xét

Bài đăng phổ biến từ blog này

Entry Test của FPT

IQ - Kiểm tra tư duy logic (8/20) - GMAT- Kiểm tra khả năng tính toán trong thời gian ngắn (8/20) - Tiếng Anh (18-> 25/50) - Các bài thi chuyên môn - FE (8/20) IQ: lên mạng tìm "IQ test" là ra đầy. + GMAT: Những câu trắc nghiệm tính toán đơn giản kiểu như sau:  1 . Một shop thời trang sale off quần jeans 15 %, quần jeans giá 450 $, người mua đưa 500 $, hỏi cashier trả lại bao nhiêu $ tiền thừa.? 2 . 100 % là 180 , vậy 150 là bao nhiêu %? Tiếng anh: Cỡ như thi TOEIC thôi. Chuyên môn: Mobile thì trắc nghiệm Java. Qúa trình tuyển như sau :v Lần 1: Test IQ, Tiếng Anh( mình làm í ẹ khoảng 50% mà vẫn được) , Java Lân 2: được gọi điện lên :)) + Gioi thiệu bản thân + Họ chỉ hỏi các câu căn bản như: -. OOP: là gì, 4 tính chất, ví dụ, khác nhau giữa interface và abstract - CODE: hầu toàn các bài toán vòng for :)) , cẩn thận mấy câu kế thừa. SQL (distinct, view, function, cursor, store procedure, ...v.v.), nhớ có câu cộng 2 số int không dùng biến đệm hơi khoai haha + Nói ch...

Java: Java Package-Thư viện trong Java

Giới thiệu về Package Các bạn mới học lập trình Java thường không dể ý tới package vì các bạn toàn tạo file .java vào cùng 1 chỗ, không cần sắp xếp, không cần quản lý truy nhập. Nhưng để tăng kỹ năng lập trình với Java, các bạn cần phải tìm hiểu về package trong Java. Các bạn có thể tham khảo định nghĩa sau: Package được dùng để đóng gói các lớp trong chương trình lại với nhau thành một khối. Đây là cách tốt nhất để lưu trữ các lớp gần giống nhau hoặc có cùng một module thành một khối thống nhất – để đáp ứng 1 khối chức năng. Từ đây mình sẽ giới thiệu thêm với các bạn các câu lệnh nhâp khẩu,nó có định dạng như sau : Định dạng :  import javaPackageNameImport;    Nó giống như khai báo thư viện ở các ngôn ngữ lập trình khác.Như vậy,chỉ khi các bạn nhập khẩu chúng,các bạn mới có thể sử dụng thư viện mà chúng cung cấp cho ta. VD :    import java.util.Date;   import java.text.SimpleDateFormat; Lưu ý : -Các câu lệnh nhập khẩu rất nhiều và...

Khác nhau giữa Array và ArrayList và HashMap

Collection bản chất là tập các lớp dùng để lưu trữ danh sách và có khả năng tự co giãn khi danh sách thay đổi : Thêm , sửa , xóa , chèn … Hai lớp Collection thường được sử dụng nhiều nhất là ArrayList và Hashmap Giới thiệu về ArrayList ArrayList sử dụng cấu trúc mảng để lưu trữ phần tử , tuy nhiên có hai đặc điểm khác mảng : Không cần khai báo trước kiểu phần tử . Không cần xác định trước số lượng phần tử ( kích thước mảng ). N ó có kh ả năng truy c ậ p ph ầ n t ử ng ẫ u nhiên (Do th ừ a k ế t ừ interface RandomAccess ). P hương thức khởi tạo ● ArrayList () ● ArrayList (Collection c) ● ArrayList ( int initialCapactity ) Các phương thức chính ● add(Object o) ● remove(Object o) ● get( int index) ● size() ● isEmpty () ● contains(Object o) ● clear() Giới thiệu về HashMap ● Là ki ể u t ậ p h ợ p t ừ đ i ể n, HashMap cho phép truy xu ấ t tr ự c ti ế p t ớ i m ộ ...