Java cannot find symbol variable class

Ошибка компиляции “Не найти символ”

Просмотрите, что такое ошибки компиляции, а затем конкретно объясните, что такое ошибка «не может найти символ» и как она вызвана.

1. Обзор

В этом учебнике мы рассмотрим, что такое ошибки компиляции, а затем конкретно объясним, что такое ошибка «не может найти символ» и как она вызвана.

2. Ошибки времени компиляции

Во время компиляции компилятор анализирует и проверяет код на многие вещи; типы ссылок, слепки типов и объявления методов, чтобы назвать несколько. Эта часть процесса компиляции важна, так как на этом этапе мы получим ошибку компиляции.

В основном существует три типа ошибок времени компиляции:

  • У нас могут быть синтаксисные . Одна из наиболее распространенных ошибок, которые может сделать любой программист, это забыть поставить заоколонку в конце заявления; некоторые другие забывают импорт, несоответствие скобки, или опуская заявление о возвращении
  • Далее, естьошибки проверки типов. Это процесс проверки безопасности типов в нашем коде. С помощью этой проверки мы убеждаемся, что у нас есть последовательные типы выражений. Например, если мы определяем переменную типа int , мы никогда не должны назначать двойной или Струнные значение для него
  • Между тем, существует вероятность того, что компилятор . Это очень редко, но это может произойти. В этом случае хорошо знать, что наш код не может быть проблемой, но что это скорее внешняя проблема
Читайте также:  Php delete all files in folders

3. Ошибка “не может найти символ”

Ошибка “не может найти символ” возникает в основном, когда мы пытаемся использовать переменную, которая не определена или объявлена в нашей программе.

Когда наш код компилирует, компилятор должен проверить все идентификаторы, которые у нас есть. Ошибка “не может найти символ” означает, что мы ссылаясь на то, что компилятор не знает о .

3.1. Что может вызвать ошибку «не может найти символ»?

Действительно, есть только одна причина: Компилятор не смог найти определение переменной, на которую мы пытаемся ссылаться.

Но, Есть много причин, почему это происходит. Чтобы помочь нам понять, почему, давайте напомним себе, из чего состоит Java-код.

Наш исходный код Java состоит из:

  • Ключевые слова: правда, ложь, класс, в то время как
  • Буквально: цифры и текст
  • Операторы и другие не-альфа-токены: -,/,
  • Идентификаторы: основные , Читатель , Я , toString и так далее.
  • Комментарии и белое пространство

4. Опечатка

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

все это будет по-разному способы неправильно ссылаться на Стрингбилдер класс.

5. Сфера применения экземпляра

Эта ошибка также может быть вызвана при использовании чего-то, что было объявлено вне сферы действия класса.

Допустим, у нас есть Статья класс, который вызывает generateId метод:

Но, мы объявляем generateId метод в отдельном классе:

С помощью этой настройки компилятор даст ошибку “не может найти символ” для generateId на линии 7 Статья обрезок. Причина в том, что синтаксис строки 7 подразумевает, что generateId метод объявляется в Статья .

Как и во всех зрелых языках, существует несколько способов решения этой проблемы. Но, один из способов было бы построить ИдГенератор в Статья класса, а затем вызвать метод:

6. Неопределенные переменные

Иногда мы забываем объявить переменную. Как мы видим из фрагмента ниже, мы пытаемся манипулировать переменной мы не объявили, в данном случае, текстовые :

Мы решаем эту проблему, объявляя переменную текстовые типа Струнные :

7. Переменный охват

Когда переменная декларация выходит из сферы действия в момент, когда мы пытались использовать ее, это вызовет ошибку во время компиляции. Обычно это происходит, когда мы работаем с петлями.

Переменные внутри цикла недоступны за пределами цикла:

public boolean findLetterB(String text) < for (int i=0; i < text.length(); i++) < Character character = text.charAt(i); if (String.valueOf(character).equals("b")) < return true; >return false; > if (character == "a") < // >

если заявление должно идти внутри для петли если нам нужно изучить символы больше:

public boolean findLetterB(String text) < for (int i = 0; i < text.length(); i++) < Character character = text.charAt(i); if (String.valueOf(character).equals("b")) < return true; >else if (String.valueOf(character).equals("a")) < . >return false; > >

8. Недействительное использование методов или полей

Ошибка “не может найти символ” также произойдет, если мы используем поле в качестве метода или наоборот:

public class Article < private int length; private long id; private Listtexts; public Article(int length) < this.length = length; >// getters and setters >

Теперь, если мы попытаемся сослаться на тексты поле, как если бы это был метод:

Article article = new Article(300); List texts = article.texts();

Это потому, что компилятор ищет метод под названием тексты , которого нет.

Вообще-то, есть getter метод, который мы можем использовать вместо этого:

Article article = new Article(300); List texts = article.getTexts();

Ошибка работы на массиве, а не элемент массива также является проблемой:

И так забывает новые ключевое слово, как в:

String s = String(); // should be 'new String()'

9. Импорт пакетов и классов

Другая проблема заключается в том, чтобы забыть импортировать класс или пакет. Например, с помощью Список объект без импорта java.util.List :

// missing import statement: // import java.util.List public class Article < private int length; private long id; private Listtexts; >

Этот код не будет компилироваться, так как программа не знает, что Список ош

10. Неправильный импорт

Импорт неправильного типа, из-за завершения IDE или автоматической коррекции также является общей проблемой.

Подумайте о ситуации, когда мы хотим использовать даты в Java. Много раз мы могли бы импортировать неправильный Дата класс, который не предоставляет методы и функции, как другие классы даты, которые нам могут понадобиться:

Date date = new Date(); int year, month, day;

Чтобы получить год, месяц или день для java.util.Date , мы также должны импортировать Календарь класса и извлечь информацию оттуда.

Просто ссылаясь на getDate () из java.util.Date не будет работать:

. date.getDay(); date.getMonth(); date.getYear();

Вместо этого мы используем Календарь объект:

. Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris")); cal.setTime(date); year = cal.get(Calendar.YEAR); month = cal.get(Calendar.MONTH); day = cal.get(Calendar.DAY_OF_MONTH);

Однако, если мы импортировали Местное класса, нам не нужен дополнительный код, который предоставляет нам информацию, в которой мы нуждаемся:

. LocalDate localDate=date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); year = localDate.getYear(); month = localDate.getMonthValue(); day = localDate.getDayOfMonth();

11. Заключение

Компиляторы работают над фиксированным набором правил, которые являются специфическими для языка. Если код не придерживается этих правил, компилятор не может выполнить процесс преобразования, что приводит к ошибке компиляции. Когда мы сталкиваемся с ошибкой компиляции “Не может найти символ”, ключ должен определить причину.

Из сообщения об ошибке мы можем найти строку кода, где происходит ошибка, а какой элемент неправильный. Зная наиболее распространенные проблемы, вызывающие эту ошибку, сделает ее решение очень легко и быстро.

Источник

What is the Cannot Find Symbol Java Error?

Java Course - Mastering the Fundamentals

The Cannot Find Symbol in Java is a compilation error that occurs when we try to refer to something that is not present in the Java Symbol Table. A very common example of this error is using a variable that is not declared in the program.

Java compilers create and maintain Symbol tables. The symbol table stores the information of the identifiers i.e. classes, interfaces, variables, and methods in the given source of code. When we use these identifiers in our code, the compiler looks up to the symbol table for information. If the identifier is not declared or is not present in the given scope the compiler throws ‘Cannot Find Symbol’.

What Causes the Java Cannot Find Symbol Error?

There are multiple ways and reasons this error can occur, they all boil down to the fact that the online Java compiler couldn’t find the identifier in the Symbol table. Some of the very commonly made mistakes are listed below:

  • Java is case sensitive, thus hello and Hello are two different variables.
  • If identifiers are misspelled say the variable’s name is name and we are trying to access nmae can cause an error.
  • Sometimes variables are declared in a particular iterating loop or method and if we try to call them from outside causes an error as it is out of the scope of the variable.
  • Using variables without their declaration is also the common cause of the Java ‘Cannot find Symbol’ error.
  • Sometimes we use methods from classes of a different package. To do so we are required to import the package of the class. Missing import statements can cause the error too.
  • Use of underscore, dollar sign, numbers, letter even a character before or after different from the initial declaration can cause ‘Cannot Find Symbol’.

Examples of Java Cannot Find Symbol error

Let us now see these common errors in the form of code:

Example 1

Let us take a very simple example of a function that takes user input of a number and returns if the number is even or odd.

In the example above, the Scanner class is not imported and thus it is throwing a Cannot Find Symbol error. The compiler is not able to find Scanner in the program. Once we import the package, it is able to identify the Scanner class.

Example 2

Another example is wrong spelling and undeclared variables. Let us take a simple example where we multiply a variable a few times in a loop.

In the example above we can see 3 errors, all of them being ‘cannot find symbol’. The first one is because N is not declared in the program, and the two are because we declared finalResult but we are calling final_Result . Thus, a single underscore can also cause an error.

Example 3

Lastly, out-of-scope variables also cause a ‘Cannot find Symbol’ error, below example demonstrates it.

In the example above, the sum variable is declared inside the for loop and its scope is only inside for loop. As we are trying to access it outside the for loop, it is causing the error.

Structure of Java Cannot Find Symbol

Look at the output generated by the compiler for the 3rd example:

output-generated-bycompiler

As we can see in the output, the compiler tells the line number of the error as well as points to the variable where the error occurred and the type of the error which is cannot find symbol in this case. The compiler also produces the cannot find symbol including these two additional fields:

  • The very first one is the symbol it is unable to find, i.e. the name and type of the referenced identifier.
  • The other field is the location of the place where the symbol is used. The class and line number are returned where the identifier has been referenced.

Cannot Find Symbol vs Symbol Not Found vs Cannot Resolve Symbol

Different compilers may use slightly different terminologies. The ‘Cannot Find Symbol’, ‘Symbol Not Found’, and ‘Cannot Resolve Symbol’ are all same errors only. Besides the naming, these convey the same meaning to the user and the compiler.

Conclusion

  • The ‘Cannot Find Symbol’ error in Java is a compilation error caused when the compiler cannot find a reference to an identifier.
  • Silly mistakes like case sensitivity, use of underscore, use of undeclared variables, use of out-of-scope variables, etc. can cause this error.
  • It is also identified by ‘Symbol Not Found’ and ‘Cannot Resolve Symbol’.

Источник

Оцените статью