[Fixed] Cách khắc phục lỗi “Cannot Find Symbol” trong Java

Spread the love

Java là ngôn ngữ lập trình đa năng, hướng đối tượng, được gõ mạnh để xây dựng các ứng dụng web, di động và doanh nghiệp. Java, được phát triển bởi Sun Microsystems và hiện thuộc sở hữu của Tập đoàn Oracle, đã trở thành ngôn ngữ lập trình rất phổ biến vì tính di động, khả năng mở rộng, độ tin cậy và tính ổn định của nó.

Khi viết chương trình bằng Java, ngôn ngữ lập trình Java là Java, mã nguồn đầu tiên được biên dịch thành mã byte. Mã byte sau đó được Máy ảo Java diễn giải thành mã máy, do đó cho phép chương trình Java chạy. Do đó, Java là cả một ngôn ngữ biên dịch và thông dịch.

Quá trình biên dịch liên quan đến việc quét toàn bộ mã nguồn và dịch nó thành mã máy cùng một lúc. Mặt khác, một trình thông dịch chuyển mã nguồn thành mã máy từng dòng một.

Trong quá trình biên dịch, trình biên dịch tạo một danh sách tất cả các mã định danh được sử dụng trong chương trình. Trong Java, mã định danh là tên được đặt cho các thành phần khác nhau trong chương trình, chẳng hạn như biến, lớp, phương thức, gói và giao diện, trong số những thứ khác.

Khi một chương trình Java đang được biên dịch, các lỗi có thể phát sinh trong quá trình biên dịch. Những lỗi như vậy được gọi là lỗi biên dịch hoặc lỗi thời gian biên dịch. Lỗi biên dịch ngăn trình biên dịch Java tạo thành công mã byte của chương trình.

Lỗi biên dịch ngăn chương trình của bạn được biên dịch. Những lỗi như vậy có thể do lỗi cú pháp, ngữ nghĩa hoặc cấu trúc trong mã nguồn. Một ví dụ về lỗi biên dịch là Lỗi Không thể Tìm Biểu tượng.

lỗi: không thể tìm thấy biểu tượng

Như đã lưu ý trước đó, trong quá trình biên dịch, trình biên dịch Java tạo một danh sách tất cả các mã định danh đang được sử dụng trong chương trình và nó chỉ ra ý nghĩa của từng mã định danh. Nếu trình biên dịch tìm thấy một mã định danh mà nó không nhận ra hoặc nó không thể biết mã định danh đề cập đến cái gì, thì sẽ xảy ra lỗi không thể tìm thấy biểu tượng.

Lỗi không thể tìm thấy biểu tượng là cách trình biên dịch cho bạn biết rằng bạn đang sử dụng mã định danh mà nó không thể hiểu và do đó không thể tìm ra mã định danh phải làm gì.

Điều này có thể là do số nhận dạng bạn đang cố sử dụng chưa được khai báo, không có sẵn trong phạm vi bạn đang sử dụng hoặc chưa được nhập chính xác. Lỗi không thể tìm thấy biểu tượng có thể dẫn đến quá trình biên dịch không thành công.

  Cách tô chữ bằng hình ảnh trong Photoshop

Nguyên nhân lỗi: không tìm thấy biểu tượng

Một số nguyên nhân tiềm ẩn gây ra lỗi: không thể tìm thấy biểu tượng bao gồm:

  • Lỗi đánh máy dẫn đến các biến, phương thức, lớp hoặc tên gói bị sai chính tả. Sử dụng sai chữ hoa chữ thường cũng dẫn đến lỗi này, vì Java phân biệt chữ hoa chữ thường.
  • Sử dụng một biến, phương thức hoặc lớp chưa được khai báo hoặc sử dụng nó trước khi khai báo thực tế.
  • Sử dụng các biến, phương thức hoặc lớp bên ngoài phạm vi mà chúng đã được khai báo.
  • Tạo một thể hiện của một lớp mà không sử dụng từ khóa mới
  • Thiếu câu lệnh nhập khi cố gắng sử dụng các lớp từ các gói khác. Việc không nhập một lớp trong gói khác trước khi sử dụng cũng sẽ gây ra lỗi này.
  • Nhập gói không chính xác.

Khi trình biên dịch phát hiện bất kỳ lỗi nào ở trên trong mã của bạn, nó sẽ dừng biên dịch và đưa ra lỗi không thể tìm thấy biểu tượng.

Ví dụ về lỗi: không thể tìm thấy biểu tượng

Chúng ta hãy xem chi tiết các mẫu mã cho biết các nguyên nhân khác nhau gây ra lỗi không thể tìm thấy biểu tượng và cách khắc phục lỗi.

#1. lỗi đánh máy

Các biến, phương thức, lớp hoặc tên gói sai chính tả và trường hợp sai dẫn đến lỗi không thể tìm thấy biểu tượng. Hãy xem xét đoạn mã dưới đây:

class Test {
  public static void main(String[] args) {
    int even_number = 4;
    System.out.println(even_numbe); // misspelled variable name
    System.out.println(Even_number);// wrong case
    int sum = addnumber(5, 20); // misspelled method name, wrong case
    System.out.println(sum);
  }
  
  public static int addNumbers(int a, int b) {
    int result = a + b;
    return result;
  }
}

Kết quả biên dịch mã trên được hiển thị bên dưới:

Để sửa lỗi, đảm bảo rằng bạn đang sử dụng đúng phương thức và tên biến. Trong ví dụ này, biến số chẵn và tên phương thức addNumbers đã bị viết sai chính tả và sử dụng sai trường hợp. Để sửa những lỗi này, hãy sử dụng đúng biến và tên phương thức là số_chẵn và addNumbers như minh họa bên dưới:

class Test {
  public static void main(String[] args) {
    int even_number = 4;
    System.out.println(even_number); // Correct variable name with the right case
    System.out.println(even_number); // Correct variable name with the right case
    int sum = addNumbers(5, 20); // Correct method name
    System.out.println(sum);
  }

  public static int addNumbers(int a, int b) {
    int result = a + b;
    return result;
  }
}

Đầu ra:

4
4
25

#2. Biến không được khai báo

Các biến không được khai báo, sử dụng các biến trước khi khai báo và sử dụng các biến, phương thức và lớp bên ngoài phạm vi của chúng dẫn đến biểu tượng không thể tìm thấy như hình dưới đây:

class Test {
  public static void main(String[] args) {
    System.out.println(y); // y is undeclared
    System.out.println(num); // num used before its declaration
    int num = 4; // num's declaration and initialization
    if (num > 3) {
      int x = 2;
    };
    System.out.println(x); // x - used outside its scope
  }
}

Kết quả của việc biên dịch mã này được hiển thị bên dưới:

Để sửa lỗi này, hãy đảm bảo khai báo mọi biến bạn sử dụng trong chương trình của mình và chỉ sử dụng chúng sau khi đã khai báo. Trong trường hợp của chúng tôi, các biến y và num đã được sử dụng trước khi được khai báo. Sửa lỗi này bằng cách sử dụng chúng sau khi khai báo.

  Cách ngăn ảnh tự chụp xuất hiện trong album ảnh tự chụp của iPhone

Biến x đã được sử dụng ngoài phạm vi mà nó đã được khai báo. Để sửa lỗi này, hãy sử dụng nó trong khối if nơi nó đã được khai báo như hình dưới đây:

class Test {
  public static void main(String[] args) {
    String y = "Hello World";
    System.out.println(y); // y - used after it has been declared
    int num = 4; 
    System.out.println(num); // num - used after it has been declared
    
    if (num > 3) {
      int x = 2;
      System.out.println(x); // x - used within the scope of the if statement
    };
  }
}

Đầu ra:

Hello World
4
2

#3. Các biến, phương thức và lớp ngoài phạm vi

Việc sử dụng các biến, phương thức và lớp bên ngoài phạm vi mà chúng đã được khai báo sẽ dẫn đến biểu tượng không thể tìm thấy như trong đoạn mã dưới đây:

class Test {
  public static void main(String[] args) {
    if (true) {
      int number = 10;
    }
    System.out.println(number); // 'number' is out of scope
  }
}

Biên dịch mã này dẫn đến lỗi sau:

Để sửa lỗi, hãy đảm bảo rằng bạn đang sử dụng biến số trong phạm vi mà nó đã được khai báo. Đó là trong phạm vi của khối if như hình dưới đây:

class Test {
  public static void main(String[] args) {
    if (true) {
      int number = 10;
      System.out.println(number); // number - used within the scope of the if block
    }
  }
}

Đầu ra:

10

#4. Tạo một thể hiện của một lớp mà không sử dụng từ khóa mới

Java là một ngôn ngữ hướng đối tượng và do đó bạn có thể tạo các đối tượng còn được gọi là các thể hiện của lớp trong một chương trình Java. Tuy nhiên, nếu bạn làm điều này mà không sử dụng từ khóa mới, bạn sẽ gặp phải biểu tượng không thể tìm thấy như hình bên dưới:

public class Car {
  private String make;
  private String model;

  public Car(String make, String model) {
    this.make = make;
    this.model = model;
  }

  public String getMake() {
    return make;
  }

  public String getModel() {
    return model;
  }

  public static void main(String[] args) {
    // Creating an instance of the Car class without using new
    Car myCar = Car("Ford", "Fiesta");

    System.out.println("Make: " + myCar.getMake());
    System.out.println("Model: " + myCar.getModel());
  }
}

Biên dịch mã dẫn đến một lỗi như hình dưới đây:

Để sửa lỗi, hãy sử dụng từ khóa mới bất cứ khi nào bạn tạo đối tượng. Để tạo một thể hiện của một lớp trong Java, bạn cần sử dụng từ khóa mới. Do đó, để tạo một thể hiện của lớp Car, bạn phải sử dụng new Car() như hình dưới đây:

public class Car {
  private String make;
  private String model;

  public Car(String make, String model) {
    this.make = make;
    this.model = model;
  }

  public String getMake() {
    return make;
  }

  public String getModel() {
    return model;
  }

  public static void main(String[] args) {
    // Instance of Car created correctly by using the new keyword
    Car myCar = new Car("Ford", "Fiesta");

    System.out.println("Make: " + myCar.getMake());
    System.out.println("Model: " + myCar.getModel());
  }
}

Đầu ra:

Make: Ford
Model: Fiesta

#5. Thiếu nhập

Việc cố gắng sử dụng một lớp được tìm thấy trong một gói khác mà không nhập nó sẽ dẫn đến lỗi không thể tìm thấy biểu tượng. Xem mã dưới đây:

class Test {
  public static void main(String[] args) {
    System.out.println("Hello, enter any number");
    // Missing import for the Scanner class
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    System.out.println("The number you entered is: " + number);
    scanner.close();
  }
}

Kết quả biên dịch mã được hiển thị bên dưới:

  7 Phụ Kiện Chụp Ảnh Cần Thiết Cho Người Mới Bắt Đầu

Lớp Scanner được sử dụng để nhận đầu vào của người dùng từ bàn phím trong chương trình Java. Để sử dụng nó, trước tiên bạn cần nhập nó vào tệp bạn muốn sử dụng. Nhập lớp máy quét làm cho nó có sẵn để sử dụng như được hiển thị. Câu lệnh nhập là dòng đầu tiên trong mã bên dưới:

import java.util.Scanner;
class Test {
  public static void main(String[] args) {
    System.out.println("Hello, enter any number");
    // Missing import for the Scanner class
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    System.out.println("The number you entered is: " + number);
    scanner.close();
  }
}

Đầu ra:

Hello, enter any number
45
The number you entered is: 45

#6. Nhập sai

Ngoài việc không nhập được gói bạn muốn sử dụng, việc nhập sai gói cũng có thể dẫn đến biểu tượng không thể tìm thấy. Hãy xem xét đoạn mã dưới đây:

import java.util.Dates; // importing the wrong package - correct package is Date
class Test {
  public static void main(String[] args) {
    Dates now = new Dates();
        System.out.println(now);
  }
}

Biên dịch mã dẫn đến các lỗi sau:

Để sửa lỗi tạo biểu tượng không thể tìm thấy, hãy đảm bảo bạn đang nhập đúng gói. Trong mã đã tạo ra lỗi, lớp đã được nhập là Ngày. Tuy nhiên, không có lớp sẵn có được gọi là Ngày. Tên chính xác là Ngày. Do đó, để xóa lỗi, hãy nhập Ngày chứ không phải Ngày như hình bên dưới:

import java.util.Date; // importing the correct package - Date and not Dates
class Test {
  public static void main(String[] args) {
    Date now = new Date();
        System.out.println(now);
  }
}

Đầu ra:

Thu Aug 17 12:02:12 EAT 2023

Ảnh hưởng của lỗi: không tìm thấy ký hiệu trong Compilation

Là lỗi biên dịch, tác động trực tiếp nhất của lỗi không thể tìm thấy biểu tượng là lỗi trong quá trình biên dịch. Khi Java đang được biên dịch thành mã byte, các lỗi được phát hiện trong mã nguồn dẫn đến quá trình biên dịch không thành công. Do đó, sẽ không có mã byte nào được tạo để sử dụng khi thực thi chương trình.

Khi những lỗi như vậy phát sinh, nguyên nhân rõ ràng của hành động là bắt đầu gỡ lỗi mã nguồn của bạn để tìm ra nguyên nhân gây ra lỗi và sửa lỗi. Trong khi việc gỡ lỗi có thể mang lại lợi ích là giúp bạn làm quen tốt hơn với một ngôn ngữ, thì nó có thể dẫn đến sự chậm trễ trong quá trình phát triển. Ngoài ra, chất lượng mã nguồn tổng thể bị ảnh hưởng do lỗi trong mã nguồn.

Phần kết luận

Họ không thể tìm thấy lỗi biểu tượng, một lỗi rất phổ biến và bạn chắc chắn sẽ gặp phải chúng khi viết mã Java. May mắn thay, đây cũng là một lỗi rất dễ tránh. Không thể tìm thấy kết quả lỗi biểu tượng do sử dụng sai số nhận dạng. Do đó, để tránh lỗi, hãy đảm bảo bạn khai báo tất cả các biến, phương thức và lớp trước khi sử dụng chúng.

Ngoài ra, hãy đảm bảo rằng bạn không mắc bất kỳ lỗi đánh máy nào khi tham chiếu các mã định danh bạn đang sử dụng trong chương trình của mình và sử dụng tất cả các mã định danh trong phạm vi bạn đã khai báo chúng. Cuối cùng, trong trường hợp bạn sẽ sử dụng bất kỳ gói hoặc lớp bên ngoài nào trong chương trình của mình, hãy đảm bảo nhập đúng gói vào chương trình của bạn trước khi bắt đầu sử dụng chúng.

Bạn cũng có thể khám phá phần mềm giám sát Java tốt nhất dành cho doanh nghiệp.

x