Module 1 — Tổng kết & cheat sheet
Tóm tắt toàn bộ Module 1: bytecode, JVM/JRE/JDK, môi trường, Hello World, tư duy I-P-O. Bookmark trang này để tra cứu nhanh.
TL;DR: Module 1 đưa bạn từ "Java là gì?" đến chương trình chạy được đầu tiên. Bạn đã hiểu bytecode và JVM là nền tảng của Write Once Run Anywhere; phân biệt JDK/JRE/JVM để chọn đúng công cụ; cài môi trường và chạy Hello World bằng javac/java; áp mô hình I-P-O để phân rã bài toán thành sequence, selection, iteration. Trang này để bookmark và tra cứu nhanh.
Đã đi qua những gì
Module 1 bắt đầu với câu hỏi nền tảng: tại sao Java lại chạy được trên mọi hệ điều hành mà không cần compile lại? Câu trả lời nằm ở bytecode — lớp trung gian mà javac tạo ra từ source, và JVM đọc để chạy trên từng nền tảng cụ thể. Từ đó bạn phân biệt ba khái niệm thường nhầm lẫn: JVM (động cơ chạy bytecode), JRE (JVM cộng thư viện chuẩn, đủ để deploy), JDK (JRE cộng công cụ biên dịch, cần để viết code) — và biết khi nào cần cái nào. Bài cài đặt môi trường đưa bạn từ máy trắng đến JDK 21 LTS chạy được, với java -version và javac -version xác nhận. Hello World không chỉ là nghi lễ — bạn giải thích được vai trò từng keyword: vì sao main phải static, vì sao tên file phải khớp tên class, System.out.println làm gì khác System.out.print. Bài compile-và-run đào sâu vòng đời bytecode: javap -c để đọc instruction stack-based, classpath để JVM tìm .class. Cuối cùng, tư duy I-P-O trang bị cho bạn khung phân rã bài toán trước khi viết một dòng code — và mini-challenge lịch tháng là bài thực chiến khép lại module.
🗺️ Cheat sheet
| Concept | Khi nào dùng / Ý chính | Pitfall |
|---|---|---|
| Bytecode | File .class do javac sinh ra — lệnh trung gian không phụ thuộc OS | Bytecode không chạy trực tiếp; cần JVM đọc và thực thi |
| JVM | Đọc bytecode, chạy trên từng OS cụ thể; JIT compile hot path sang native code | Mỗi OS có JVM riêng — JVM không portable, bytecode mới portable |
| JRE | JVM + thư viện chuẩn (java.lang, java.util…) — đủ để chạy app đã build | Từ Java 9 không còn bản JRE standalone; dùng JDK hoặc jlink |
| JDK | JRE + javac, jar, javap, jdb — cần để viết và build code | Developer luôn cài JDK, không phải JRE |
javac Foo.java | Compile source thành Foo.class | Tên file phải khớp tên public class (kể cả hoa/thường) |
java Foo | Nạp Foo.class lên JVM và chạy | Không có extension .class; sai classpath → ClassNotFoundException |
main signature | public static void main(String[] args) — signature cố định JVM gọi | Thiếu static hoặc sai kiểu tham số → JVM không tìm thấy entry point |
System.out.println | In ra console và xuống dòng; System.out.print in không xuống dòng | Nhầm println / print là lỗi logic, không phải lỗi compile |
| Classpath | -cp <path> chỉ JVM tìm .class; mặc định là . (thư mục hiện tại) | Quên set classpath khi .class không cùng thư mục → không chạy được |
| Mô hình I-P-O | Input → Processing → Output: đặt 3 câu hỏi trước khi code | Bỏ qua edge case (số âm, chuỗi rỗng, null) ngay từ bước Processing |
| 3 construct | Sequence, selection (if/switch), iteration (for/while) — đủ để xây mọi thuật toán (Böhm-Jacopini) | Nhầm construct không sai cú pháp nhưng logic sai — cần trace tay |
📖 Glossary
| Thuật ngữ | Định nghĩa |
|---|---|
| Bytecode | Tập lệnh trung gian stack-based do javac sinh ra, lưu trong file .class, không phụ thuộc hệ điều hành. |
| JVM | Java Virtual Machine — phần mềm đọc bytecode và sinh machine code cho từng OS; là động cơ của Java platform. |
| JRE | Java Runtime Environment — JVM cộng thư viện chuẩn Java; đủ để chạy app Java đã build sẵn. |
| JDK | Java Development Kit — JRE cộng các công cụ phát triển (javac, jar, javap, jdb); cần để viết và build code. |
| JIT | Just-In-Time Compiler — thành phần trong JVM compile bytecode "hot path" thành native machine code khi chạy, tăng tốc đáng kể sau warm-up. |
| Classloader | Thành phần JVM tải file .class vào memory theo 3 tầng (Java 9+): Bootstrap, Platform, Application (trước Java 9, tầng giữa là Extension). |
| Classpath | Danh sách thư mục/jar file nơi JVM tìm file .class; mặc định là thư mục hiện tại (.). |
| I-P-O | Input-Processing-Output — mô hình phân rã chương trình thành 3 pha; công cụ tư duy trước khi code. |
| Sequence | Construct cơ bản: các lệnh thực thi lần lượt theo thứ tự xuất hiện. |
| Selection | Construct rẽ nhánh (if, switch): chọn một trong nhiều đường đi tùy điều kiện. |
| Iteration | Construct lặp (for, while, do-while): thực thi một khối lệnh nhiều lần tùy điều kiện. |
| Write Once Run Anywhere | Triết lý nền tảng của Java: bytecode compile một lần, chạy trên mọi OS có JVM — không cần compile lại. |
✅ Self-assessment
Bạn đã đạt module này nếu trả lời được:
- Giải thích được cơ chế bytecode trung gian và tại sao JVM giúp Java chạy được trên mọi OS (WORA) — nếu chưa: đọc lại Bài 01 — Java là gì và Bài 06 — Compile & Run.
- Phân biệt được JVM, JRE, JDK và chọn đúng cái cần khi chạy app, deploy server, hay viết code — nếu chưa: đọc lại Bài 02 — JVM, JRE, JDK và Bài 03 — Cài đặt môi trường.
- Implement và chạy được chương trình Java đầu tiên qua
javac/java, giải thích vai trò từng dòng trong Hello World — nếu chưa: đọc lại Bài 04 — Hello World và Bài 06 — Compile & Run. - Áp dụng được mô hình I-P-O để phân rã bài toán thành sequence, selection, iteration — nếu chưa: đọc lại Bài 05 — Tư duy lập trình và làm lại Bài 07 — Mini-challenge.
🚀 Tiếp theo
Module 2 — Cú pháp Java & kiểu dữ liệu — bắt đầu xây trên nền tảng này: biến, kiểu nguyên thủy (int, double, boolean, char), toán tử, ép kiểu, String, và cách Java quản lý bộ nhớ stack vs heap. Bạn sẽ viết chương trình thực sự xử lý dữ liệu, không chỉ in ra console.
📚 Tài liệu mở rộng
- Java Language Specification SE 21 — spec chính thức Java language (Oracle).
- Java Virtual Machine Specification SE 21 — spec JVM, bytecode instruction set, classloader protocol.
- JDK 21 Documentation — tài liệu API và tools (javac, java, javap, jlink) phiên bản LTS hiện tại.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên