Menu
CoddyTech

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ầnCode
Khai báo lớppublic class Main { ... }
Điểm bắt đầu chương trìnhpublic static void main(String[] args) { ... }
In ra một dòngSystem.out.println("Hello, World!");
In không xuống dòngSystem.out.print("text");
Đọc dữ liệu nhậpScanner sc = new Scanner(System.in);
Import một lớpimport 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ểuMô tả
intSố nguyên có dấu 32 bit
longSố nguyên có dấu 64 bit
double / floatSố thực dấu phẩy động
booleantrue hoặc false
charMột ký tự Unicode 16 bit
byte / shortSố nguyên 8 bit / 16 bit
StringChuỗi bất biến (là lớp, không phải kiểu nguyên thủy)
Integer, Double, BooleanLớp bao cho kiểu nguyên thủy
varTự suy luận kiểu biến cục bộ (Java 10+)

Biến

Thao tácCú pháp
Khai báo và khởi tạoint 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ỗiString s = "Hi " + name;
Chuyển chuỗi sang intint n = Integer.parseInt("42");
Chuyển int sang chuỗiString s = String.valueOf(42);
Chuỗi có định dạngString.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"
instanceofKiểm tra kiểu: if (o instanceof String s)

Luồng điều khiển

Câu lệnhCú pháp
If / elseif (x > 0) { ... } else { ... }
Câu lệnh switchswitch (n) { case 1: ...; break; default: ...; }
Biểu thức switchvar s = switch (n) { case 1 -> "one"; default -> "other"; };
Vòng lặp whilewhile (i < n) { ... }
Vòng lặp do-whiledo { ... } while (i < n);
Vòng lặp forfor (int i = 0; i < n; i++) { ... }
Vòng lặp duyệt phần tử (for-each)for (String item : list) { ... }
Break / continuebreak; 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ứcTá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ọiKế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 / ceilLà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_VALUEGiá 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ácCú pháp
Định nghĩa phương thứcint add(int a, int b) { return a + b; }
Không có giá trị trả vềvoid greet() { ... }
Phương thức tĩnhstatic int square(int x) { return x * x; }
Phương thức publicpublic String getName() { return name; }
Varargsint sum(int... nums) { ... }
Gọi phương thứcint r = add(2, 3);
Gọi phương thức tĩnhMath.max(a, b);
Nạp chồng phương thứcint max(int a, int b) và double max(double a, double b)

Lớp và OOP

Thao tácCú pháp
Định nghĩa lớppublic class Dog { ... }
Trườngprivate String name;
Hàm khởi tạopublic Dog(String name) { this.name = name; }
Tạo đối tượngDog d = new Dog("Rex");
Getter / setterpublic String getName() { return name; }
Kế thừaclass Puppy extends Dog { ... }
Interfaceinterface Runnable { void run(); }
Hiện thực interfaceclass 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ăngCú pháp
Record (dữ liệu bất biến)record Point(int x, int y) {}
Dùng recordvar p = new Point(1, 2); p.x();
Enumenum Day { MON, TUE, WED }
Enum kèm giá trịenum Coin { PENNY(1), DIME(10); ... }
Text blockString s = """\n multi\n line\n """;
So khớp mẫu với instanceofif (o instanceof String s) { s.length(); }
Switch so khớp mẫu (Java 21)case Integer i -> ...; case String s -> ...;
Lớp sealedsealed interface Shape permits Circle, Square {}

Collection

Các collection generic trong java.util.

KiểuCô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ảngint[] nums = {1, 2, 3};
Duyệt danh sáchfor (T x : list) { ... }
Duyệt mapfor (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ácCú pháp
Biểu thức lambdax -> x * 2
Tạo streamlist.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ẫuCú pháp
Try / catchtry { ... } catch (Exception e) { ... }
Bắt ngoại lệ cụ thểcatch (IOException e) { ... }
Finallyfinally { ... } luôn được chạy
Try-with-resourcestry (Scanner sc = new Scanner(...)) { ... }
Ném ngoại lệthrow new IllegalArgumentException("bad");
Lớp genericclass 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?
Với đối tượng, == 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ì?
Streams API (Java 8+) cho phép bạn xử lý collection bằng một chuỗi thao tác dễ đọc như 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?
Dùng 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?
Mảng (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.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học Java cùng Coddy

Bắt đầu