Cheat sheet Java
Cập nhật lần cuối
Hello World và cấu trúc chương trình
Mọi chương trình Java đều chạy từ phương thức main nằm trong một lớp.
| Thành phần | Code |
|---|---|
| Khai báo lớp | public class Main { ... } |
| Điểm bắt đầu chương trình | public static void main(String[] args) { ... } |
| In ra một dòng | System.out.println("Hello, World!"); |
| In không xuống dòng | System.out.print("text"); |
| Đọc dữ liệu nhập | Scanner sc = new Scanner(System.in); |
| Import một lớp | import java.util.ArrayList; |
| Chú thích | // line và /* block */ |
Kiểu dữ liệu
Kiểu nguyên thủy viết thường; lớp bao (wrapper class) tương ứng viết hoa chữ cái đầu.
| Kiểu | Mô tả |
|---|---|
int | Số nguyên có dấu 32 bit |
long | Số nguyên có dấu 64 bit |
double / float | Số thực dấu phẩy động |
boolean | true hoặc false |
char | Một ký tự Unicode 16 bit |
byte / short | Số nguyên 8 bit / 16 bit |
String | Chuỗi bất biến (là lớp, không phải kiểu nguyên thủy) |
Integer, Double, Boolean | Lớp bao cho kiểu nguyên thủy |
var | Tự suy luận kiểu biến cục bộ (Java 10+) |
Biến
| Thao tác | Cú pháp |
|---|---|
| Khai báo và khởi tạo | int x = 5; |
| Suy luận kiểu (biến cục bộ) | var name = "Ada"; |
| Hằng số | final double PI = 3.14159; |
| Nối chuỗi | String s = "Hi " + name; |
| Chuyển chuỗi sang int | int n = Integer.parseInt("42"); |
| Chuyển int sang chuỗi | String s = String.valueOf(42); |
| Chuỗi có định dạng | String.format("%d items", n) |
Toán tử
Toán tử số học, so sánh, logic và gán.
| Toán tử | Ý nghĩa |
|---|---|
+ - * / % | Cộng, trừ, nhân, chia, chia lấy dư |
++ -- | Tăng / giảm 1 |
== != | Bằng / khác (với đối tượng là so sánh tham chiếu) |
> < >= <= | So sánh lớn hơn / nhỏ hơn |
&& || ! | Logic AND, OR, NOT (đánh giá ngắn mạch) |
& | ^ ~ | Phép toán bit AND, OR, XOR, NOT |
<< >> >>> | Dịch trái, dịch phải có dấu, dịch phải không dấu |
+= -= *= /= | Gán kết hợp |
? : | Toán tử ba ngôi: x > 0 ? "pos" : "neg" |
instanceof | Kiểm tra kiểu: if (o instanceof String s) |
Luồng điều khiển
| Câu lệnh | Cú pháp |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Câu lệnh switch | switch (n) { case 1: ...; break; default: ...; } |
| Biểu thức switch | var s = switch (n) { case 1 -> "one"; default -> "other"; }; |
| Vòng lặp while | while (i < n) { ... } |
| Vòng lặp do-while | do { ... } while (i < n); |
| Vòng lặp for | for (int i = 0; i < n; i++) { ... } |
| Vòng lặp duyệt phần tử (for-each) | for (String item : list) { ... } |
| Break / continue | break; thoát vòng lặp, continue; bỏ qua để sang lần lặp tiếp theo |
Phương thức của String
String là bất biến: mọi phương thức đều trả về một chuỗi mới. Dùng StringBuilder khi bạn nối chuỗi trong vòng lặp.
| Phương thức | Tác dụng |
|---|---|
s.length() | Số ký tự |
s.charAt(i) | Ký tự tại chỉ số i |
s.substring(a, b) | Cắt từ a (bao gồm) đến b (không bao gồm) |
s.indexOf("x") | Chỉ số đầu tiên của chuỗi con, hoặc -1 |
s.contains("x") | true nếu có chứa chuỗi con |
s.replace("a", "b") | Thay thế mọi lần xuất hiện |
s.split(",") | Tách thành một String[] |
s.trim() / s.strip() | Xóa khoảng trắng ở đầu và cuối |
s.toUpperCase() / toLowerCase() | Đổi chữ hoa / chữ thường |
s.equals(t) / equalsIgnoreCase(t) | So sánh giá trị (không dùng ==) |
s.startsWith("x") / endsWith("x") | Kiểm tra tiền tố / hậu tố |
String.join(",", list) | Nối các phần tử bằng ký tự phân cách |
Math và các tiện ích thường dùng
Các hàm tĩnh hỗ trợ từ java.lang.Math và các lớp bao số.
| Lời gọi | Kết quả |
|---|---|
Math.max(a, b) / Math.min(a, b) | Giá trị lớn hơn / nhỏ hơn trong hai giá trị |
Math.abs(x) | Giá trị tuyệt đối |
Math.pow(x, y) | x mũ y (trả về double) |
Math.sqrt(x) | Căn bậc hai |
Math.round(x) / floor / ceil | Làm tròn gần nhất / xuống / lên |
Math.random() | Số double ngẫu nhiên trong [0.0, 1.0) |
Integer.parseInt("42") | Chuyển chuỗi sang int |
Integer.MAX_VALUE / MIN_VALUE | Giá trị int lớn nhất / nhỏ nhất |
Arrays.sort(arr) | Sắp xếp mảng tại chỗ |
Arrays.toString(arr) | Nội dung mảng dạng dễ đọc |
Phương thức
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa phương thức | int add(int a, int b) { return a + b; } |
| Không có giá trị trả về | void greet() { ... } |
| Phương thức tĩnh | static int square(int x) { return x * x; } |
| Phương thức public | public String getName() { return name; } |
| Varargs | int sum(int... nums) { ... } |
| Gọi phương thức | int r = add(2, 3); |
| Gọi phương thức tĩnh | Math.max(a, b); |
| Nạp chồng phương thức | int max(int a, int b) và double max(double a, double b) |
Lớp và OOP
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa lớp | public class Dog { ... } |
| Trường | private String name; |
| Hàm khởi tạo | public Dog(String name) { this.name = name; } |
| Tạo đối tượng | Dog d = new Dog("Rex"); |
| Getter / setter | public String getName() { return name; } |
| Kế thừa | class Puppy extends Dog { ... } |
| Interface | interface Runnable { void run(); } |
| Hiện thực interface | class Task implements Runnable { ... } |
| Ghi đè phương thức | @Override public void speak() { ... } |
Record, enum và Java hiện đại
Cú pháp hiện đại, ngắn gọn (Java 14+) cho lớp chứa dữ liệu và tập giá trị cố định.
| Tính năng | Cú pháp |
|---|---|
| Record (dữ liệu bất biến) | record Point(int x, int y) {} |
| Dùng record | var p = new Point(1, 2); p.x(); |
| Enum | enum Day { MON, TUE, WED } |
| Enum kèm giá trị | enum Coin { PENNY(1), DIME(10); ... } |
| Text block | String s = """\n multi\n line\n """; |
So khớp mẫu với instanceof | if (o instanceof String s) { s.length(); } |
| Switch so khớp mẫu (Java 21) | case Integer i -> ...; case String s -> ...; |
| Lớp sealed | sealed interface Shape permits Circle, Square {} |
Collection
Các collection generic trong java.util.
| Kiểu | Công dụng và ví dụ |
|---|---|
ArrayList<T> | Mảng động: list.add(1); list.get(0); list.size(); |
HashMap<K, V> | Cặp khóa và giá trị: map.put("a", 1); map.get("a"); |
HashSet<T> | Giá trị không trùng lặp: set.add(5); set.contains(5); |
LinkedList<T> | Danh sách liên kết đôi, hợp làm queue/deque |
ArrayDeque<T> | Ngăn xếp/hàng đợi: dq.push(x); dq.pop(); |
| Mảng | int[] nums = {1, 2, 3}; |
| Duyệt danh sách | for (T x : list) { ... } |
| Duyệt map | for (var e : map.entrySet()) { e.getKey(); e.getValue(); } |
Stream và lambda
Chuỗi xử lý kiểu hàm trên collection (Java 8+).
| Thao tác | Cú pháp |
|---|---|
| Biểu thức lambda | x -> x * 2 |
| Tạo stream | list.stream() |
| Lọc | .filter(n -> n > 0) |
| Map / biến đổi | .map(n -> n * 2) |
| Sắp xếp | .sorted() hoặc .sorted(Comparator.reverseOrder()) |
| Reduce / tính tổng | .reduce(0, Integer::sum) |
| Đếm / so khớp | .count(), .anyMatch(n -> n > 5) |
| Thu về danh sách | .collect(Collectors.toList()) |
| For each | .forEach(System.out::println) |
Mẫu thường dùng (try/catch, generic)
| Mẫu | Cú pháp |
|---|---|
| Try / catch | try { ... } catch (Exception e) { ... } |
| Bắt ngoại lệ cụ thể | catch (IOException e) { ... } |
| Finally | finally { ... } luôn được chạy |
| Try-with-resources | try (Scanner sc = new Scanner(...)) { ... } |
| Ném ngoại lệ | throw new IllegalArgumentException("bad"); |
| Lớp generic | class Box<T> { T value; } |
| Phương thức generic | <T> T first(List<T> list) { ... } |
| Kiểu có giới hạn | <T extends Number> |
Cú pháp, collection và thao tác stream trong Java mà bạn dùng nhiều nhất, gói gọn trong một trang. Cheat sheet Java này là bảng tra cứu nhanh khi viết Java: kiểu dữ liệu, luồng điều khiển, lớp, các collection ArrayList/HashMap, Streams API, cùng các mẫu xử lý ngoại lệ và generic bạn dùng hằng ngày.
Mọi thứ ở đây đều là Java chuẩn (Java 8 trở lên) và biên dịch được bằng javac. Sao chép đoạn bạn cần, hoặc chạy thử bất kỳ đoạn code nào ngay trong playground Java, không cần cài JDK. Mới học Java? Khóa học Java tương tác miễn phí của Coddy xây dựng các khái niệm này cho bạn từng bước.
Câu hỏi thường gặp về cheat sheet Java
Cheat sheet Java này có miễn phí không?
Có. Cheat sheet Java này hoàn toàn miễn phí và không cần đăng ký. Lưu trang lại và quay lại bất cứ khi nào bạn cần tra cú pháp, một collection hay một thao tác stream.
Trong Java, == và .equals() khác nhau thế nào?
== so sánh tham chiếu, tức là hai biến có trỏ tới cùng một đối tượng hay không, còn .equals() so sánh nội dung. Hai đối tượng String khác nhau có cùng nội dung thì .equals() cho kết quả đúng nhưng == có thể không. Luôn dùng .equals() để so sánh giá trị của chuỗi và các đối tượng khác; chỉ dùng == cho kiểu nguyên thủy (int, boolean...) hoặc để kiểm tra null.Stream trong Java dùng để làm gì?
filter, map, sorted, reduce, collect thay vì tự viết vòng lặp. Bạn bắt đầu với list.stream(), nối các thao tác trung gian, rồi kết thúc bằng một thao tác cuối như collect(Collectors.toList()) hoặc forEach. Nhờ vậy code biến đổi dữ liệu ngắn gọn và rõ ý.Có thể luyện tập Java online không?
Có. Mở playground Java để biên dịch và chạy bất kỳ đoạn code nào trong cheat sheet này ngay trên trình duyệt, không cần cài JDK. Khi muốn học có lộ trình, khóa học Java tương tác miễn phí của Coddy dẫn bạn từng bước từ biến và vòng lặp đến lớp, collection và stream.
Cheat sheet này có phù hợp cho người mới bắt đầu không?
Có. Nội dung được sắp xếp từ những thành phần cơ bản nhất (kiểu dữ liệu, luồng điều khiển, phương thức) đến các chủ đề nâng cao (stream, generic, ngoại lệ), nên ngay ngày đầu bạn đã dùng được các phần trên cùng, rồi dần làm chủ phần còn lại.
Làm sao chuyển String sang int trong Java?
Integer.parseInt("42") để lấy giá trị int nguyên thủy, hoặc Integer.valueOf("42") để lấy đối tượng Integer. Cả hai đều ném NumberFormatException nếu chuỗi không phải số hợp lệ, nên hãy đặt chúng trong try / catch khi dữ liệu nhập không đáng tin cậy. Để chuyển ngược lại, dùng String.valueOf(n) hoặc Integer.toString(n).ArrayList và mảng trong Java khác nhau thế nào?
int[] a = new int[5]) có độ dài cố định, đặt ngay khi tạo, và chứa trực tiếp được giá trị nguyên thủy. ArrayList<T> tự co giãn khi bạn gọi add() và remove(), nhưng chỉ lưu đối tượng, nên giá trị nguyên thủy được tự động đóng gói (ArrayList<Integer>). Dùng mảng khi kích thước đã biết và cố định; dùng ArrayList khi số phần tử thay đổi.