Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

สาเหตุของ Cannot find symbol Error ใน Java

Cannot find symbol เกิดตอน Compile-time เมื่อ Compiler ไม่รู้จัก Symbol (Class, Method, Variable) ที่เราอ้างถึง สาเหตุหลัก 3 ข้อ

สาเหตุหลัก 3 ข้อ

  1. Missing Import - ไม่ได้ Import Class/Package ที่ใช้
  2. Typo / Wrong Name - สะกดชื่อ Class/Method/Variable ผิด (Case-Sensitive)
  3. Classpath Issue - Class ไม่อยู่ใน Classpath (JAR ไม่ได้ Add, โฟลเดอร์ผิด)

ตัวอย่างที่ 1: Missing Import

public class ReadingData {
    public static void main(String args[]) {
        System.out.println("Enter name: ");
        Scanner sc = new Scanner(System.in); // Error: Scanner ไม่ได้ Import
        String name = sc.next();
        System.out.println("Hello " + name);
    }
}

Error

ReadingData.java:5: error: cannot find symbol
    Scanner sc = new Scanner(System.in);
    ^
  symbol:   class Scanner
  location: class ReadingData

แก้ไข

import java.util.Scanner; // เพิ่ม Import
public class ReadingData { ... }

ตัวอย่างที่ 2: Typo / Wrong Case

public class TypoExample {
    public static void main(String[] args) {
        System.out.println("Hello"); // ตัวพิมพ์ใหญ่ S
        system.out.println("World"); // Error: system (เล็ก) ไม่มีใน java.lang
    }
}

ตัวอย่างที่ 3: Classpath Problem

มีไฟล์ com/example/Util.class แต่รันจากโฟลเดอร์อื่นโดยไม่ Set Classpath

javac -cp . MyApp.java
java -cp . MyApp  // ถ้า Util.class ไม่อยู่ใน . หรือ JAR -> Cannot find symbol

วิธีแก้ไขทั่วไป

  • IDE (IntelliJ/Eclipse/VS Code) - กด Alt+Enter / Ctrl+Space -> Auto Import
  • Command Line - ตรวจสอบ import Statement, Spelling, -cp / -classpath
  • Maven/Gradle - ตรวจสอบ Dependency ใน pom.xml / build.gradle ว่ามี Library ที่จำเป็นครบ

Error แบบใกล้เคียง

Error สาเหตุ
Cannot find symbol: method xxx() เรียก Method ที่ไม่มีอยู่ (Typo, Wrong Params, หรือ Version ไม่ตรง)
Cannot find symbol: variable xxx ใช้ Variable ที่ไม่ได้ประกาศ หรือ Out of Scope
Package xxx does not exist Import Package ผิด หรือ Library หาย

สรุป

Cannot find symbol = Compiler ไม่เห็น Definition ของ Symbol นั้น ตรวจสอบ Import, Spelling/Case, Classpath/Dependencies ให้ครบถ้วน