Как исправить "error cannot find symbol java"?

102
19 февраля 2022, 02:10

Только начал учиться программированию. При компиляции main файла выходит ошибка ""error cannot find symbol java". Если я правильно понял, он не взаимодействует с Person.java, а пытается выполнить всё main.java. Но как это решить всё никак не могу понять.

main.java
 public class main {
    public static void main(String[] args) {
        Person dima = new Person();
        System.out.println(dima.height);
    }
}
Person.java
 public class Person {
    int height = 189;
}
E:\study\java> javac Person.java
E:\study\java> javac main.java
main.java:3: error: cannot find symbol
                Person dima = new Person();
                ^
  symbol:   class Person
  location: class main
main.java:3: error: cannot find symbol
                Person dima = new Person();
                                  ^
  symbol:   class Person
  location: class main
2 errors
Answer 1

Такое поведение скорее всего связано с переменной %CLASSPATH% в которой перечислены папки где javac будет искать .class файлы для компиляции. По умолчанию эта переменная окружения не задана и тогда javac ищет .class файлы только в текущей папке.

Скорее всего у вас эта переменная была задана ранее (можно проверить при помощи echo %CLASSPATH%) и тогда текущую папку нужно указывать вручную, например через

javac main.java --class-path .

(. означает текущую директорию)

Если не хочется каждый раз вручную указывать --class-path . можно очистить %CLASSPATH% при помощи set CLASSPATH=

Обратите внимание что необязательно даже вызывать javac Person.java, компилятор автоматически скомпилирует Person.java

Вот пример запуска на моем компьютере (у меня линукс поэтому синтаксис немного отличается)

~/Workspace$ export CLASSPATH=
~/Workspace$ echo $CLASSPATH
~/Workspace$ javac Person.java 
~/Workspace$ javac main.java 
~/Workspace$ java main 
189
~/Workspace$ export CLASSPATH=/somedirectory
~/Workspace$ echo $CLASSPATH
/somedirectory
~/Workspace$ javac Person.java 
~/Workspace$ javac main.java 
main.java:3: error: cannot find symbol
        Person dima = new Person();
        ^
  symbol:   class Person
  location: class main
main.java:3: error: cannot find symbol
        Person dima = new Person();
                          ^
  symbol:   class Person
  location: class main
2 errors
~/Workspace$ javac main.java --class-path .
~/Workspace$ java main 
189
Answer 2

И компиляция и выполнение проходят без ошибок:

Удалось смоделировать такую же ошибку изменив в файле main.java в строке Рerson dima = new Рerson(); английские заглавные "Пи" на русские заглавные "Эр". Посмотрите, может быть у вас подобная ошибка.

READ ALSO
Android Q, scoped storage

Android Q, scoped storage

Как известно, в Android Q (API=29) Google в очередной раз изменил правила доступа к внешней памяти (external storage) и ввел понятие Scoped StorageТеперь:

165
Указать путь к папке

Указать путь к папке

Надо, чтобы пользователь указал путь к папке с файлами через визуальный файловый менеджерНашел следующий код

101
slack использование event api

slack использование event api

Не могу разобраться где взять "Request URL" для ивента, в задаче надо поприветствовать нового участника каналаИ похоже для этого, нужно подписать...

106
Как залить фоновый цвет в SVG изображении луны в процентах

Как залить фоновый цвет в SVG изображении луны в процентах

Я хочу, чтобы цвет фонового изображения SVG заполнялся постепенно, в процентах

86