Tin tức và phân tích của tất cả các thiết bị di động

[Fixed] Cách khắc phục lỗi “Không tìm thấy biểu tượng” trong Java

Java là ngôn ngữ lập trình hướng đối tượng, có mục đích chung, hướng đối tượng để phát triển các ứng dụng web, thiết bị 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 nhờ 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 dựa vào mã nguồn Java để được biên dịch đầu tiên 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. Vì vậy, Java vừa là ngôn ngữ được biên dịch vừa là ngôn ngữ thông dịch.

Quá trình biên dịch bao gồm việc quét tất cả mã nguồn và đồng thời dịch nó sang mã máy. Mặt khác, trình thông dịch chuyển đổi mã nguồn thành mã máy mỗi lần một dòng.

Trong quá trình biên dịch, trình biên dịch liệt kê 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 chương trình khác nhau, chẳng hạn như biến, lớp, phương thức, gói và giao diện, cùng với các thành phần khác.

Khi biên dịch một chương trình Java, có thể xảy ra lỗi 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. Các lỗi biên dịch ngăn trình biên dịch Java tạo thành công mã byte chương trình.

Lỗi biên dịch khiến chương trình không thể biên dịch được. Những lỗi như vậy có thể do lỗi cú pháp, lỗi 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 thấy biểu tượng.

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

Như đã đề cập trước đó, trong quá trình biên dịch, trình biên dịch Java liệt kê tất cả các mã định danh được sử dụng trong chương trình và xác định ý 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 không thể xác định mã định danh đó đề cập đến điều gì thì bạn sẽ gặp 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ột mã định danh mà nó không thể hiểu và do đó không thể hiểu được mã định danh đó phải làm gì.

Điều này có thể là do ID 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 lỗi biên dịch.

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 viết sai chính tả các biến, phương thức, lớp hoặc tên gói. Sử dụng sai chữ hoa 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 chúng trước khi khai báo thực tế.
  • Sử dụng các biến, phương thức hoặc lớp nằm 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ẽ dẫn đến lỗi này.
  • Nhập gói không hợp lệ.

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ẽ ngừ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 tìm thấy biểu tượng

Chúng ta hãy xem xét chi tiết các ví dụ mã cho thấy 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 giải quyết lỗi này.

# 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à các trường hợp viết sai chính tả dẫn đến lỗi “không thể tìm thấy ký hiệu”. Hãy xem xét đoạn mã sau:

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 của đoạn mã trên được hiển thị bên dưới:

Để sửa lỗi, hãy đảm bảo bạn đang sử dụng đúng phương thức và tên biến. Trong ví dụ, biến số chẵn và tên phương thức addNumbers bị 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 tên biến và phương thức, đó là số chẵn và thêm các số như hiển thị 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;
  }
}

Lối ra:

4
4
25

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

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

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ả biên dịch của mã này được hiển thị dưới đây:

Để sửa lỗi này, hãy nhớ khai báo mọi biến được sử dụng trong chương trình của bạn và chỉ sử dụng chúng sau khi bạn khai báo chúng. 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. Hãy sửa lỗi này bằng cách sử dụng chúng sau khi khai báo chúng.

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ư hiển thị bên dưới:

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
    };
  }
}

Lối ra:

Hello World
4
2

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

Việc sử dụng các biến, phương thức và lớp nằm 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ã sau:

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 bạn sử dụng biến số trong phạm vi được khai báo. Điều này nằm trong phạm vi của khối if 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
    }
  }
}

Lối 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à ngôn ngữ hướng đối tượng, vì vậy 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 thực hiện việc này mà không sử dụng từ khóa mới, bạn sẽ gặp biểu tượng không tìm thấy 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) {
    // 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());
  }
}

Việc biên dịch mã dẫn đến lỗi như hình dưới đây:

Để sửa lỗi, hãy sử dụng từ khóa mới mỗi khi bạn tạo đối tượng. Để khởi tạo một lớp trong Java, bạn phải sử dụng từ khóa mới. Vì vậy, để khởi tạo lớp Car, bạn cần sử dụng hàm Car() mới, như hiển thị 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) {
    // 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());
  }
}

Lối ra:

Make: Ford
Model: Fiesta

#5. Không nhập khẩu

Cố gắng sử dụng một lớp được tìm thấy trong gói khác mà không nhập 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ị dưới đây:

Lớp Scanner được sử dụng để lấy dữ liệu đầ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 phải nhập nó vào tệp bạn muốn sử dụng. Nhập lớp máy quét sẽ 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 đoạn mã sau:

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();
  }
}

Lối ra:

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

#6. Nhập không hợp lệ

Ngoài việc không nhập được gói 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 tìm thấy”. Hãy xem xét đoạn mã sau:

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);
  }
}

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

Để sửa lỗi không tìm thấy biểu tượng, hãy đảm bảo bạn đang nhập đúng gói. Trong mã tạo ra lỗi, lớp đã nhập là Ngày. Tuy nhiên, không có lớp tích hợp nào được gọi là Ngày. Tên chính xác là Ngày. Do đó, để loại bỏ lỗi, hãy nhập ngày chứ không phải ngày như hiển thị 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);
  }
}

Lối ra:

Thu Aug 17 12:02:12 EAT 2023

Tác động của lỗi: Không thể tìm thấy biểu tượng trong quá trình biên dịch

Là một lỗi biên dịch, ảnh hưởng trực tiếp nhất của lỗi không tìm thấy biểu tượng là lỗi trong quá trình biên dịch. Khi Java được biên dịch sang mã byte, các lỗi được tìm thấy trong mã nguồn khiế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 trong quá trình thực hiện chương trình.

Khi những lỗi như vậy xảy ra, lý do hành động rõ ràng là bắt đầu gỡ lỗi mã nguồn để tìm ra nguyên nhân gây ra lỗi và sửa lỗi. Mặc dù việc gỡ lỗi có thể có lợi thế là giúp bạn làm quen với ngôn ngữ này nhưng 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 tổng thể của mã nguồn bị ảnh hưởng bởi các lỗi trong mã nguồn.

Ứng dụng

Họ không thể tìm thấy lỗi ký hiệu, đây là một lỗi rất phổ biến và chắc chắn bạn sẽ gặp phải 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 lỗi biểu tượng là do sử dụng sai mã định danh. 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 bạn không mắc lỗi chính tả khi đề cập đến các ID bạn sử dụng trong chương trình của mình và sử dụng tất cả các ID của bạn trong phạm vi bạn đã khai báo chúng. Cuối cùng, nếu bạn định 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 bạn nhập các gói thích hợp vào chương trình của mình trước khi sử dụng chúng.

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