Почему я должен указывать путь к классу Java для моего файла .class, когда я нахожусь в той же папке в Windows CMD?

У меня есть простой "test.java" в папке. Я нахожусь под той папкой, которая содержит и "test.java", уже запускал "javac test.java". Создается файл "test.class".

Но когда я пытаюсь запустить "javac test", моя среда всегда возвращается

Ошибка: не удалось найти или загрузить тест основного класса

если я не наберу java -cp . test, чтобы заставить java выполнять файл test.class.

Почему?

Спасибо.


person Raymond Yin    schedule 17.02.2017    source источник
comment
Поскольку текущий каталог по умолчанию не включен в путь к классам.   -  person Kayaman    schedule 17.02.2017
comment
@kayaman, да, но текущий каталог должен быть включен по умолчанию в Windows, я только что узнал, что для моего env var CLASSPATH установлено другое значение.   -  person Raymond Yin    schedule 17.02.2017
comment
@GhostCat, принято. Спасибо.   -  person Raymond Yin    schedule 17.02.2017


Ответы (1)


Вы сами ответили на свой вопрос.

Когда вы делаете

java test

Тогда текущий каталог не находится в вашем пути к классам.

Таким образом, это работает, когда вы идете с -cp . (как говорится: добавьте "." aka "текущий каталог к ​​текущему пути к классам")

С другой стороны, по умолчанию "." должен быть в пути к классам по умолчанию (см. здесь).

Итак, два объяснения:

  • Как уже было сказано, небольшая заминка в именах ваших файлов.
  • Ваша среда фактически устанавливает переменную ENV пути к классам; и тот исключает "."
person GhostCat    schedule 17.02.2017
comment
Я согласен с этим ответом - если вы собираетесь его использовать, имейте в виду, что параметр командной строки включает точку: -cp .; точка представляет текущий каталог. - person arcy; 17.02.2017
comment
Спасибо за вклад; Я обновил свой ответ относительно этого аспекта; так что, возможно, ваше согласие может проявиться как голосование ;-) - person GhostCat; 17.02.2017
comment
Спасибо GhostCat. Второе объяснение - причина - моя среда разработки var в Windows каким-то образом установлена ​​​​как CLASSPATH=(some/folder), в результате чего Java ищет эту папку вместо текущего рабочего каталога. Теперь я удалил его, и тест Java заработал. - person Raymond Yin; 17.02.2017
comment
Принято к сведению. Спасибо @arcy. - person Raymond Yin; 17.02.2017