Lỗi "Cannot find symbol" xảy ra khi compiler không tìm thấy định nghĩa của class, method, variable... được sử dụng trong code.
Các nguyên nhân phổ biến
- Thiếu import: Dùng class mà không
importpackage. - Sai tên class/package: Chính tả sai (case-sensitive).
- Classpath thiếu: File .class hoặc JAR không nằm trong classpath.
- Scope biến: Dùng biến ngoài phạm vi (ví dụ: biến local trong if-block dùng ở ngoài).
- Typo tên method/biến: Gõ sai chính tả.
Ví dụ điển hình: Quên import Scanner
public class ReadingData {
public static void main(String args[]) {
System.out.println("Enter your name: ");
Scanner sc = new Scanner(System.in); // Lỗi: Cannot find symbol Scanner
String name = sc.next();
System.out.println("Hello " + name);
}
}
ReadingData.java:6: error: cannot find symbol
Scanner sc = new Scanner(System.in);
^
symbol: class Scanner
location: class ReadingData
Cách khắc phục
import java.util.Scanner; // Thêm import này
public class ReadingData {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
// ...
}
}
Checklist debug
- Kiểm tra
importở đầu file. - Kiểm tra chính tả class/method/biến (Java case-sensitive).
- Kiểm tra classpath:
javac -cp .:lib/* Main.java. - Kiểm tra scope biến (đặc biệt trong loop, if, try-catch).
- Dùng IDE (IntelliJ, Eclipse) → gợi ý import tự động (Alt+Enter).