Nội dung
Danh sách bài học
- 01~18 phút
Class và Object — bản thiết kế vs sản phẩm đúc ra
Phân biệt class (bản thiết kế) và object (instance), từ khóa new, object sống trên heap và reference trên stack, `==` vs `.equals()` lần nữa nhìn từ góc OOP.
- 02~16 phút
Constructor và `this` — khởi tạo object đúng cách
Constructor là gì, default constructor, overload constructor, this() chaining, this. để phân biệt field với parameter, và vì sao không return được trong constructor.
- 03~17 phút
Field, local, static — ba loại biến, ba lifecycle
Phân biệt instance field, static field, local variable; thứ tự khởi tạo field; static initializer block; và vì sao static field thường là nguồn rò rỉ memory trong Java server-side.
- 04~17 phút
Encapsulation — `private`, `public`, `protected` và lý do field nên `private`
Bốn access modifier của Java, nguyên tắc 'private by default, expose qua method', lợi ích cho maintenance + invariant, và ý nghĩa mới với record và JPMS.
- 05~20 phút
`toString`, `equals`, `hashCode` — ba method phải override đúng
Override Object.toString để debug dễ, equals/hashCode đúng contract Java, Objects.equals & Objects.hash, và vì sao HashMap hỏng khi bạn override equals mà quên hashCode.
- 06~15 phút
Record — data class với 1 dòng
Record từ Java 16: cú pháp, canonical constructor, compact constructor, implicit accessor, khi nào nên dùng record thay class truyền thống, và giới hạn (immutable, không kế thừa).
- 07~30 phút
Mini-challenge: Model hoá thư viện với record + class
Bài thực hành khép lại Module 5 — xây Library quản lý Book và Borrower. Áp dụng record cho value object, class cho mutable state, encapsulation, validation, equals/hashCode.