Java cơ bản #1: Java là gì, cài JDK 25 và chạy chương trình đầu tiên
Bắt đầu học Java đúng cách năm 2026: Java chạy thế nào (mã nguồn → bytecode → JVM), cài JDK 25 LTS, chọn IDE, viết Hello World theo kiểu mới của Java 25 và kiểu truyền thống, thử code nhanh bằng JShell — kèm lộ trình 12 bài của loạt.
8 phút đọc
Mục lục
Java ra đời năm 1995 và sau 30 năm vẫn là một trong những ngôn ngữ được dùng nhiều nhất: hệ thống ngân hàng, thương mại điện tử, ứng dụng Android, công cụ dữ liệu lớn như Kafka, Spark, Elasticsearch, và vô số dịch vụ backend viết bằng Spring Boot. Ở Việt Nam, "Java developer" luôn nằm trong nhóm vị trí tuyển nhiều nhất.
Loạt bài này đưa bạn từ con số 0 tới viết được một ứng dụng Java hoàn chỉnh có kiểm thử. Bài đầu tiên: hiểu Java chạy thế nào, cài đặt môi trường và chạy chương trình đầu tiên.
Lộ trình 12 bài
| Bài | Nội dung |
|---|---|
| 1 | Giới thiệu, cài JDK, chương trình đầu tiên (bài này) |
| 2 | Biến, kiểu dữ liệu, toán tử |
| 3 | Rẽ nhánh và vòng lặp |
| 4 | Mảng và chuỗi |
| 5 | Phương thức (hàm) |
| 6 | Lớp và đối tượng |
| 7 | Kế thừa, đa hình, interface |
| 8 | Record, enum và các phương thức của Object |
| 9 | Collections và Generics |
| 10 | Ngoại lệ và đọc ghi file |
| 11 | Lambda, Stream API, Optional |
| 12 | Dự án cuối: Maven, JUnit, ứng dụng quản lý chi tiêu |
Mỗi bài có code chạy được, bài tập, thẻ ghi nhớ và câu hỏi trắc nghiệm ở trang ôn tập.
Java chạy như thế nào
Khác với C/C++ biên dịch thẳng ra mã máy, Java đi qua một bước trung gian:
Đang vẽ sơ đồ…
flowchart LR
A["Hello.java<br/>(mã nguồn)"] -->|javac biên dịch| B["Hello.class<br/>(bytecode)"]
B --> C["JVM trên Windows"]
B --> D["JVM trên macOS"]
B --> E["JVM trên Linux"]- Bạn viết mã nguồn trong file
.java. - Trình biên dịch
javacdịch thành bytecode (file.class) — một dạng lệnh không phụ thuộc hệ điều hành. - JVM (Java Virtual Machine) đọc bytecode và chạy. Trong lúc chạy, bộ biên dịch JIT dịch những đoạn code chạy nhiều thành mã máy để chạy nhanh.
Đây là ý nghĩa của khẩu hiệu "Write once, run anywhere": cùng một file .class chạy được trên mọi máy có JVM.
Ba thuật ngữ hay gặp:
| Thuật ngữ | Là gì |
|---|---|
| JVM | Máy ảo chạy bytecode |
| JRE | JVM + thư viện chuẩn — đủ để chạy chương trình |
| JDK | JRE + công cụ phát triển (javac, jshell, jar…) — cần để viết chương trình |
Người học lập trình luôn cài JDK.
Cài đặt JDK 25
Java ra phiên bản mới mỗi 6 tháng; cứ 2 năm có một bản LTS (hỗ trợ dài hạn) mà doanh nghiệp dùng. Bản LTS mới nhất là Java 25 (9/2025) — loạt bài dùng bản này.
Có nhiều bản phân phối JDK miễn phí, cùng mã nguồn OpenJDK. Gợi ý: Eclipse Temurin (adoptium.net).
# Windows (PowerShell)
winget install EclipseAdoptium.Temurin.25.JDK
# macOS (Homebrew)
brew install --cask temurin@25
# Ubuntu / Debian
sudo apt install openjdk-25-jdk
# Hoặc dùng SDKMAN! (macOS/Linux), tiện khi cần nhiều phiên bản
sdk install java 25-temMở terminal mới và kiểm tra:
java -version # openjdk version "25..."
javac -version # javac 25...Lưu ý: báo
'java' is not recognizedtrên Windows → biến môi trườngPATHchưa có thư mụcbincủa JDK. Trình cài Temurin có tuỳ chọn "Set JAVA_HOME / Add to PATH" — tích vào, hoặc thêm thủ công rồi mở lại terminal.
Chọn công cụ viết code
| Công cụ | Nhận xét |
|---|---|
| IntelliJ IDEA (bản Community miễn phí) | IDE mạnh nhất cho Java, gợi ý code và sửa lỗi rất tốt — khuyên dùng |
| VS Code + Extension Pack for Java | Nhẹ, quen thuộc nếu bạn đã dùng cho web |
| Eclipse, NetBeans | Lâu đời, vẫn được dùng ở trường học |
Giai đoạn đầu, hãy thử gõ lệnh javac/java bằng tay ít nhất một lần để hiểu IDE đang làm gì sau nút ▶.
Chương trình đầu tiên
Cách mới của Java 25
Từ Java 25, một file Java có thể ngắn như thế này:
void main() {
IO.println("Xin chào, Java!");
}Chạy thẳng file mã nguồn, không cần biên dịch riêng:
java Hello.java
# Xin chào, Java!Đây là compact source file (JEP 512): không cần khai báo lớp, main không cần public static, và lớp IO có sẵn để in ra màn hình (IO.println, IO.print) và đọc dữ liệu (IO.readln). Cách viết này được tạo ra để người mới tập trung vào logic trước, học về lớp sau.
Cách truyền thống
Bạn sẽ gặp cách này trong 99% code và tài liệu hiện có — cần đọc hiểu được:
public class HelloTruyenThong {
public static void main(String[] args) {
System.out.println("Xin chào, Java!");
}
}| Thành phần | Ý nghĩa (sẽ học kỹ ở các bài sau) |
|---|---|
public class HelloTruyenThong | Khai báo một lớp; tên lớp public phải trùng tên file |
public static void main(String[] args) | Điểm bắt đầu chương trình; args là tham số dòng lệnh |
System.out.println(...) | In ra màn hình rồi xuống dòng |
{ } và ; | Khối lệnh và kết thúc câu lệnh |
Biên dịch và chạy theo hai bước:
javac HelloTruyenThong.java # tạo ra HelloTruyenThong.class
java HelloTruyenThong # chạy (không ghi đuôi .class)Trong loạt bài, các ví dụ ngắn dùng cách mới (
void main(),IO.println) cho gọn; từ bài 6 về lớp và đối tượng, ta dùng cả hai và giải thích rõpublic,static.
Đọc dữ liệu từ bàn phím
void main() {
String ten = IO.readln("Bạn tên gì? ");
IO.println("Chào " + ten + ", chúc học Java vui vẻ!");
}Cách cũ, vẫn rất phổ biến, dùng Scanner:
import java.util.Scanner;
public class ChaoTenScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Bạn bao nhiêu tuổi? ");
int tuoi = sc.nextInt();
System.out.println("Năm sau bạn " + (tuoi + 1) + " tuổi.");
}
}JShell: thử code trong vài giây
JDK có sẵn JShell — gõ lệnh Java và thấy kết quả ngay, không cần tạo file. Rất hợp để thử một ý nhỏ:
$ jshell
jshell> 7 / 2
$1 ==> 3
jshell> 7 / 2.0
$2 ==> 3.5
jshell> "java".toUpperCase()
$3 ==> "JAVA"
jshell> /exit(Vì sao 7 / 2 ra 3? Bài 2 sẽ giải thích.)
Đọc lỗi biên dịch
Lỗi là chuyện hằng ngày. Thử bỏ dấu ;:
Hello.java:2: error: ';' expected
IO.println("Xin chào, Java!")
^
1 errorCách đọc: tên file : số dòng : mô tả lỗi, dấu ^ chỉ vị trí. Ba lỗi người mới hay gặp nhất:
| Lỗi | Nguyên nhân |
|---|---|
';' expected | Thiếu dấu chấm phẩy cuối câu lệnh |
cannot find symbol | Gõ sai tên biến/phương thức, sai chữ hoa–thường (system.out thay vì System.out), hoặc thiếu import |
class X is public, should be declared in a file named X.java | Tên lớp public không trùng tên file |
Java phân biệt chữ hoa, chữ thường: Main, main, MAIN là ba tên khác nhau.
Quy ước đặt tên
| Loại | Quy ước | Ví dụ |
|---|---|---|
| Lớp, interface, record | PascalCase | SinhVien, TaiKhoanNganHang |
| Biến, phương thức | camelCase | diemTrungBinh, tinhTong() |
| Hằng số | UPPER_SNAKE_CASE | SO_NGAY_TRONG_TUAN |
| Package | chữ thường, tên miền đảo ngược | vn.dtcode.chitieu |
Tên biến có thể viết tiếng Việt có dấu, nhưng nên dùng tiếng Việt không dấu hoặc tiếng Anh để tránh lỗi mã hoá ký tự khi làm việc nhóm.
Bài tập
- Cài JDK 25, chạy
java -versionvà chụp lại kết quả. - Viết
GioiThieu.javain ra 3 dòng: tên, trường/công ty, lý do học Java. - Viết lại bài 2 theo cách truyền thống (
public class,System.out.println), biên dịch bằngjavacvà chạy bằngjava. - Cố tình gây ba lỗi trong bảng trên, đọc thông báo lỗi của trình biên dịch.
Tài liệu tham khảo cho cả loạt
- dev.java/learn — trang học Java chính thức của Oracle, cập nhật theo phiên bản mới.
- Java Programming MOOC — Đại học Helsinki (java-programming.mooc.fi), miễn phí, rất nhiều bài tập có chấm tự động.
- Head First Java (bản 3) — sách nhập môn dễ đọc.
- Effective Java (bản 3) — Joshua Bloch, đọc sau khi xong loạt này để viết Java "chuẩn nghề".
- Tài liệu API Java 25 (docs.oracle.com) — tra cứu mọi lớp trong thư viện chuẩn.
Tổng kết
- Java biên dịch ra bytecode, chạy trên JVM → cùng một chương trình chạy trên mọi hệ điều hành.
- Cài JDK (không chỉ JRE); dùng bản LTS 25.
- Java 25 cho phép viết gọn
void main() { IO.println(...); }và chạy bằngjava File.java; cách truyền thốngpublic class+public static void mainvẫn là thứ bạn gặp nhiều nhất. - JShell để thử code nhanh; đọc lỗi biên dịch theo file : dòng : mô tả.
- Bài tiếp theo: biến, kiểu dữ liệu và toán tử.
Nguồn tham khảo: OpenJDK — JEP 512: Compact Source Files and Instance Main Methods; dev.java/learn; tài liệu Eclipse Temurin (adoptium.net); Java Programming MOOC — University of Helsinki.
Bài này thế nào?
Bài viết có hữu ích với bạn?
Đánh giá giúp mình biết nên viết thêm về chủ đề nào.