01/10/2018, 16:03
Tại sao trong Java nên viết phương thức khởi tạo mặc định?
Mọi người cho mình hỏi tại sao trong java nên viết phương thức khởi tạo mặc định .Anh e cho mình ví dụ để hiểu ạ.Cảm ơn mọi người
Bài liên quan
…
Có thực sự là nên viết phương thức khởi tạo mặc định không? Nếu như không có nhu cầu quản lý giá trị mặc định thì không cần.
Nói theo lý thuyết OOP, khi 1 object được reference từ một class, các thứ có trong phương thức khởi tạo sẽ được set mặc định cho object đó ngay từ khi khai báo. Mình sẽ lấy ví dụ với một số nguyên a. Có 2 đoạn code sau:
Có phương thức khởi tạo
Ko có phương thức khởi tạo:
Rồi thêm entry point để chạy code:
Theo như code trên 2 output hoàn toàn khác nhau mặc dù phương thức add() có cùng tham số mà a khi tạo ban đầu của cả 2 class đều là null(giá trị trống). Vì do class WithCtor có phương thức khởi tạo và trong đó set a bằng 10 tức là bao nhiêu object lấy từ nó ra đều có mặc định a = 10, trừ khi bạn đổi a bằng số nào đó khác trong phương thức khởi tạo của WithCtor.
Khái niệm này ban đầu mình cũng thấy khó hiểu, về sau thấy quen.
Bạn không bắt buộc sử dụng nó nhưng có thể dùng theo cách sau:
Cách này dùng ctor tiện hơn vì đỡ phải tạo các set method nhiều!
Tại vì để tránh các lỗi về khởi tạo dối tượng !!!
Khi bạn viết một class không có constructor nào thì mặc định Java hiểu class đó có 1 constructor mặc định là constructor không tham số
VD
Nhưng nếu bạn viết một ctor có tham số thì Java sẽ bỏ qua ctor không tham số mặc định . Muốn có ctor không tham số bắt buộc bạn phải viết vào class
VD
Vì thế người ta khuyên dev phải viết ctor mặc định, tức ctor không tham số để tránh việc quên viết nó nếu bạn Overload ctor có tham số
Ctor không tham số giúp bạn tạo object ngay, sau đó gán giá trị sau (nhờ setters)
Mình nghĩ là cần thì viết, không cần thì thôi.
Có những cái khởi tạo chỉ constructor mới làm được thì tất nhiên bắt buộc phải viết. Còn không thì không cần phải vẽ hươu vẽ vượn làm gì.
Ví dụ:
là xong.
Cần gì phải thế này:
Còn có những cái phải bắt buộc, ví dụ như
Em không viết thì khì khi complie nó tự thêm vào. em xem file .class sẽ thấy.