Tài liệu Java
Tài liệu tham khảo Java ngắn gọn, đi kèm ví dụ. Đọc khái niệm, xem code, rồi luyện tập trong một hành trình Coddy.
Bắt đầu khóa họcBắt đầu
- Java là gìJava thực chất là gì, JVM giúp một chương trình đã biên dịch chạy ở mọi nơi như thế nào, và người ta dùng Java để xây dựng những phần mềm nào.
- Cài đặt JavaCách cài đặt Java Development Kit (JDK), chọn phiên bản và nhà cung cấp, rồi kiểm tra java và javac chạy được từ dòng lệnh.
- Chạy JavaChu trình hai bước biên dịch rồi chạy đằng sau mọi chương trình Java: chuyển mã nguồn .java thành bytecode bằng javac, rồi chạy tệp .class bằng java.
- Cú pháp JavaHình hài của một chương trình Java: phương thức `main`, câu lệnh và dấu chấm phẩy, khối lệnh và dấu ngoặc nhọn, cùng các quy tắc trình biên dịch kiểm tra trước khi code chạy.
- Chú thíchCách viết chú thích trong Java: chú thích một dòng //, khối nhiều dòng /* */ và chú thích tài liệu Javadoc /** */, cùng khi nào nên dùng từng loại và những điều cần tránh.
Biến và kiểu dữ liệu
- BiếnCách biến hoạt động trong Java: khai báo kèm kiểu, gán giá trị, quy tắc đặt tên, từ khóa var, hằng số với final và quy tắc phạm vi quyết định biến tồn tại ở đâu.
- Kiểu dữ liệuGiải thích các kiểu dữ liệu trong Java: tám kiểu nguyên thủy, kiểu tham chiếu, giá trị mặc định, literal và hậu tố, tràn số, và khi nào dùng kiểu số nào.
- ChuỗiCách chuỗi hoạt động trong Java: tạo chuỗi, nối bằng +, vì sao chuỗi bất biến, so sánh bằng equals và các phương thức String hằng ngày như length, substring, replace.
- Định dạng chuỗiCách định dạng chuỗi trong Java với String.format và printf: các specifier định dạng cho số, đệm khoảng trắng, số chữ số thập phân, text block và phương thức formatted.
- Toán tửCách các toán tử trong Java hoạt động: số học, so sánh, logic, gán, tăng giảm và toán tử ba ngôi, cùng phép chia nguyên, độ ưu tiên và những cái bẫy người mới hay gặp.
- Ép kiểuCách Java chuyển đổi giữa các kiểu: mở rộng tự động, ép kiểu thu hẹp tường minh, dữ liệu bị mất khi thu hẹp và chuyển đổi giữa số và chuỗi.
- Lớp MathCách dùng lớp Math trong Java: Math.pow, Math.sqrt, Math.abs, Math.max và Math.min, làm tròn với round, floor và ceil, tạo số ngẫu nhiên trong một khoảng với Math.random, các hằng số PI và E, kèm kiểu trả về của từng phương thức.
Luồng điều khiển
- if-elseCách ra quyết định trong Java với if, else if và else: điều kiện boolean, nối các nhánh, lồng nhau, toán tử ba ngôi, và những lỗi người học hay mắc.
- switchGiải thích câu lệnh switch trong Java: nhãn case, break và fall-through, nhánh default, gom nhóm case, dạng mũi tên hiện đại và biểu thức switch.
- Vòng lặp forGiải thích vòng lặp for trong Java: vòng lặp ba phần cổ điển, duyệt mảng và list, vòng lặp lồng nhau, break, continue và vòng lặp foreach.
- Vòng lặp whileGiải thích vòng lặp while trong Java: while kiểm tra điều kiện trước, do-while chạy ít nhất một lần, đọc đầu vào đến giá trị sentinel, break và continue, cách tránh vòng lặp vô hạn.
- Vòng lặp for-eachGiải thích vòng lặp for-each trong Java: duyệt mảng và collection gọn gàng, khi nào nên dùng, và cái bẫy sửa collection mà ai cũng từng vấp.
Mảng và collection
- MảngCách mảng hoạt động trong Java: độ dài cố định, khai báo và khởi tạo, chỉ số, length, duyệt mảng, mảng nhiều chiều và lớp tiện ích Arrays.
- ArrayListCách dùng ArrayList trong Java, danh sách tự co giãn mà bạn dùng thay cho mảng thường: add, get, remove, size, duyệt danh sách và sắp xếp.
- HashMapCách dùng HashMap của Java để tra cứu theo khóa: put, get, getOrDefault, containsKey, duyệt qua các entry, và những mẫu code bạn dùng nhiều nhất.
- HashSetCách dùng HashSet của Java cho tập giá trị không trùng lặp: add, contains, remove, loại bỏ phần tử trùng trong list, và hợp, giao, hiệu các tập hợp.
- Duyệt collectionCác cách duyệt collection trong Java: vòng lặp for-each, Iterator, vòng lặp theo chỉ số và phương thức forEach, cùng cách xóa phần tử an toàn khi đang duyệt.
Phương thức
- Phương thứcPhương thức trong Java là gì, cách khai báo và gọi phương thức, giá trị trả về và void, phương thức static main, và cách phương thức giúp code gọn gàng, dùng lại được.
- Tham số phương thứcCách tham số phương thức trong Java hoạt động: truyền đối số, phân biệt tham số và đối số, quy tắc truyền tham trị của Java và cách trả về giá trị.
- Nạp chồng phương thứcCách nạp chồng phương thức (method overloading) trong Java cho phép nhiều phương thức dùng chung một tên nhưng nhận tham số khác nhau, cách trình biên dịch chọn phiên bản và các lỗi mơ hồ cần tránh.
- VarargsCách varargs (...) trong Java cho phép một phương thức nhận số lượng đối số tùy ý, cách chúng trở thành mảng, quy tắc một varargs đứng cuối, cùng các bẫy khi gọi rỗng và khi mơ hồ.
Lớp và đối tượng
- LớpLớp trong Java là gì, cách định nghĩa trường và phương thức, tạo đối tượng bằng new, vai trò của this, và vì sao trạng thái instance nằm trên đối tượng.
- Hàm khởi tạoCách hàm khởi tạo trong Java hoạt động: hàm khởi tạo mặc định, hàm khởi tạo có tham số, this, nạp chồng constructor và gọi nối bằng this() và super().
- Kế thừaCách lớp con trong Java kế thừa thuộc tính và phương thức bằng extends, gọi lớp cha qua super và ghi đè hành vi, kèm những lỗi thường gặp.
- InterfaceInterface trong Java là gì, cách khai báo và triển khai interface, phương thức default và static, và interface khác lớp trừu tượng ở điểm nào.
- Lớp trừu tượngLớp trừu tượng trong Java là gì, cách khai báo phương thức trừu tượng, vì sao không thể tạo đối tượng từ nó, và khi nào nên chọn lớp trừu tượng thay vì interface.
- Đa hìnhCách đa hình trong Java cho phép một biến tham chiếu tới nhiều kiểu, vì sao phương thức ghi đè được chọn lúc chạy, và cách dùng upcasting, downcasting và instanceof an toàn.
- Access modifierCách bốn mức truy cập của Java (public, private, protected và package-private) kiểm soát những gì code khác được thấy và được chạm vào.
- Thành viên staticTừ khóa static làm gì trong Java, thuộc tính và phương thức static thuộc về lớp thay vì đối tượng ra sao, và khi nào nên dùng khối static và hằng số.
- EnumEnum trong Java là gì, cách khai báo, thêm thuộc tính và phương thức, dùng switch với enum, và vì sao enum tốt hơn một loạt hằng số int hay String.
Generic và lập trình hàm
- GenericsGenerics trong Java là gì, cách viết lớp và phương thức generic, tham số kiểu có giới hạn, wildcard, và vì sao type erasure quan trọng.
- Biểu thức lambdaBiểu thức lambda trong Java là gì, cú pháp mũi tên, cách lambda triển khai functional interface, method reference và cách lambda dùng biến bên ngoài.
- StreamCách xử lý collection bằng Stream API của Java: filter, map, sorted, collect, count và reduce, xây dựng các pipeline dễ đọc thay vì vòng lặp viết tay.
- Optionaljava.util.Optional là gì, cách tạo một Optional và cách đọc giá trị an toàn bằng map, filter, orElse và ifPresent thay cho các phép kiểm tra null.
Lỗi và gỡ lỗi
- Ngoại lệNgoại lệ (exception) trong Java là gì, cách đọc stack trace, khác biệt giữa checked và unchecked, cây phân cấp ngoại lệ và cách tự ném ngoại lệ.
- try-catchCách dùng try-catch trong Java để xử lý ngoại lệ: bắt đúng loại cụ thể, khối finally, try-with-resources và những sai lầm khiến bug bị che giấu.
- NullPointerExceptionNullPointerException trong Java thực sự có nghĩa là gì, những cách thường gặp khiến bạn gây ra nó, cách đọc thông báo lỗi và các cách viết code để phòng tránh.