[Fixed] Як усунути помилку «Не вдається знайти символ» у Java

Java — це універсальна, об’єктно-орієнтована, строго типізована мова програмування для створення веб-, мобільних і корпоративних програм. Java, розроблена Sun Microsystems і в даний час належить корпорації Oracle, стала дуже популярною мовою програмування завдяки своїй переносимості, масштабованості, надійності та стабільності.

Під час написання програм з використанням Java мова програмування Java полягає в тому, що вихідний код Java спочатку компілюється в байт-код. Тоді байт-код інтерпретується віртуальною машиною Java у машинний код, що дозволяє програмі Java працювати. Тому Java є як компільованою, так і інтерпретованою мовою.

Компіляція передбачає сканування всього вихідного коду та одразу його переклад у машинний код. Інтерпретатор, з іншого боку, перетворює вихідний код у машинний код по одному рядку за раз.

Під час компіляції компілятор створює список усіх ідентифікаторів, які використовуються в програмі. У Java ідентифікатори — це імена, надані різним елементам у програмі, таким як змінні, класи, методи, пакети та інтерфейси тощо.

Під час компіляції програми Java можуть виникати помилки під час процесу компіляції. Такі помилки відомі як помилки компіляції або помилки під час компіляції. Помилки компіляції заважають компілятору Java успішно генерувати байт-код програми.

Помилки компіляції перешкоджають компіляції вашої програми. Такі помилки можуть бути спричинені синтаксичними, семантичними або структурними помилками у вихідному коді. Прикладом помилки компіляції є помилка Cannot Find Symbol Error.

помилка: неможливо знайти символ

Як зазначалося раніше, під час компіляції компілятор Java створює список усіх ідентифікаторів, які використовуються в програмі, і визначає значення кожного ідентифікатора. Якщо компілятор знаходить ідентифікатор, який він не розпізнає, або він не може визначити, на що посилається ідентифікатор, виникає помилка неможливо знайти символ.

Помилка символу неможливо знайти — це спосіб компілятора повідомити вам, що ви використовуєте ідентифікатор, який він не може зрозуміти, і тому не може зрозуміти, що ідентифікатор має робити.

Це може бути тому, що ідентифікатор, який ви намагаєтеся використати, не було оголошено, недоступний у межах області, у якій ви його використовуєте, або не було імпортовано належним чином. Помилка символу неможливо знайти може призвести до невдалої компіляції.

Причини помилки: не вдається знайти символ

Деякі з потенційних причин помилки: неможливо знайти символ включають:

  • Друкарські помилки призводять до неправильного написання назв змінних, методів, класів або пакетів. Використання неправильного регістру також призводить до цієї помилки, оскільки Java чутлива до регістру.
  • Використання змінної, методу або класу, які не були оголошені, або використання їх до фактичного оголошення.
  • Використання змінних, методів або класів за межами області видимості, у якій вони були оголошені.
  • Створення екземпляра класу без використання ключового слова new
  • Відсутні оператори імпорту під час спроби використати класи з інших пакетів. Неможливість імпортувати клас, який знаходиться в іншому пакеті перед його використанням, також спричинить цю помилку.
  • Неправильний імпорт пакета.

Коли компілятор виявляє будь-яку з наведених вище помилок у вашому коді, він зупиняє компіляцію та видає помилку неможливо знайти символ.

Приклади помилок: неможливо знайти символ

Давайте детально розглянемо приклади коду, які показують різні причини помилки символу неможливо знайти та способи вирішення цієї помилки.

#1. Типографські помилки

Неправильно введені змінні, методи, класи або назви пакетів, а також неправильний регістр призводять до помилки символу неможливо знайти. Розглянемо код нижче:

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

Результат компіляції наведеного вище коду показано нижче:

Щоб виправити помилки, переконайтеся, що ви використовуєте правильний метод і імена змінних. У прикладі змінна even_number і ім’я методу addNumbers були написані з помилкою, і вони використовували неправильний регістр. Щоб виправити ці помилки, використовуйте правильну змінну та назву методу, яка є even_number, і addNumbers, як показано нижче:

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

Вихід:

4
4
25

#2. Неоголошена змінна

Неоголошені змінні, використання змінних перед оголошенням і використання змінних, методів і класів за межами їхньої області видимості призводять до неможливості знайти символ, як показано нижче:

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

Результат компіляції цього коду показано нижче:

Щоб виправити цю помилку, переконайтеся, що ви оголосили кожну змінну, яку ви використовуєте у своїй програмі, і використовуйте їх лише після оголошення. У нашому випадку змінні y і num були використані перед оголошенням. Виправте цю помилку, використовуючи їх після оголошення.

Змінна x була використана поза областю, у якій вона була оголошена. Щоб виправити це, використовуйте її в блоці if, де вона була оголошена, як показано нижче:

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

Вихід:

Hello World
4
2

#3. Змінні, методи та класи поза межами області видимості

Використання змінних, методів і класів за межами області видимості, у якій вони були оголошені, призведе до символу неможливо знайти, як показано в коді нижче:

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

Компіляція цього коду призводить до такої помилки:

Щоб виправити помилку, переконайтеся, що ви використовуєте змінну number у тій області, у якій її було оголошено. Це в межах блоку if, як показано нижче:

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

Вихід:

10

#4. Створення екземпляра класу без використання ключового слова new

Java є об’єктно-орієнтованою мовою, тому ви можете створювати об’єкти, також відомі як екземпляри класів у програмі Java. Однак, якщо ви зробите це без використання нового ключового слова, ви зіткнетеся з символом неможливо знайти, як показано нижче:

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

Компіляція коду призводить до помилки, як показано нижче:

Щоб виправити помилку, використовуйте ключове слово new під час створення об’єктів. Щоб створити екземпляр класу в Java, потрібно використати ключове слово new. Таким чином, щоб створити екземпляр класу Car, ви повинні використовувати new Car(), як показано нижче:

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

Вихід:

Make: Ford
Model: Fiesta

#5. Відсутній імпорт

Спроба використати клас, знайдений в іншому пакеті, без його імпорту, призводить до помилки «не вдається знайти символ». Перегляньте код нижче:

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

Результат компіляції коду показано нижче:

Клас Scanner використовується, щоб отримати дані користувача з клавіатури в програмі Java. Щоб використовувати його, вам потрібно спочатку імпортувати його у файл, який ви хочете використовувати. Імпорт класу сканера робить його доступним для використання, як показано. Оператор імпорту є першим рядком коду нижче:

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

Вихід:

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

#6. Неправильний імпорт

Крім невдачі імпорту пакета, який ви хочете використати, імпорт неправильного пакета також може призвести до символу неможливо знайти. Розглянемо код нижче:

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

Компіляція коду призводить до таких помилок:

Щоб виправити генерацію помилок символу неможливо знайти, переконайтеся, що ви імпортуєте правильний пакет. У коді, який породив помилку, було імпортовано клас Dates. Однак вбудованого класу під назвою Dates немає. Правильна назва Дата. Тому, щоб видалити помилку, імпортуйте дату, а не дати, як показано нижче:

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

Вихід:

Thu Aug 17 12:02:12 EAT 2023

Наслідки помилки: неможливо знайти символ у компіляції

Будучи помилкою компіляції, найбільш безпосереднім наслідком помилки неможливо знайти символ є збій у процесі компіляції. Коли Java компілюється в байт-код, помилки, виявлені у вихідному коді, призводять до збою процесу компіляції. Таким чином, байт-код для використання під час виконання програми не буде створено.

Коли виникають такі помилки, очевидною причиною дії є початок налагодження вихідного коду, щоб знайти причину помилок і виправити помилки. У той час як налагодження може допомогти вам краще ознайомитися з мовою, воно може призвести до затримок розробки. Крім того, на загальну якість вихідного коду впливають помилки у вихідному коді.

Висновок

Вони не можуть знайти помилки символів, дуже поширену помилку, і ви обов’язково зіткнетеся з ними під час написання коду Java. На щастя, цієї помилки також дуже легко уникнути. Неможливо знайти помилку символу через неправильне використання ідентифікаторів. Тому, щоб уникнути помилки, переконайтеся, що ви оголосили всі свої змінні, методи та класи перед їх використанням.

Крім того, переконайтеся, що ви не робите жодних друкарських помилок, посилаючись на ідентифікатори, які використовуєте у своїй програмі, і використовуйте всі свої ідентифікатори в тій області, яку ви оголосили. Нарешті, якщо ви будете використовувати будь-який пакет або зовнішні класи у своїй програмі, переконайтеся, що імпортували правильні пакети у вашу програму, перш ніж почати їх використовувати.

Ви також можете дослідити найкраще програмне забезпечення моніторингу Java для бізнесу.