Рубрики
Без рубрики

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

Изучите причины ошибки “Не удалось найти или загрузить основной класс” и узнайте, как их избежать.

Автор оригинала: baeldung.

1. введение

Иногда, когда мы запускаем программу Java, мы можем увидеть “Не удалось найти или загрузить основной класс”. Легко догадаться о причине: JVM не смогла найти основной класс и выдала эту ошибку. Но почему бы и нет?

Дальнейшее чтение:

Как исправить java.lang.UnsupportedClassVersionError

Объясненный метод Java main()

В этом уроке мы обсудим вероятные причины неудачного поиска основного класса. Кроме того, мы посмотрим, как их исправить.

2. Пример Программы

Мы начнем с Hello World программы:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world..!!!");
    }
}

Теперь давайте скомпилируем его:

$ javac HelloWorld.java

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

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

3. Неправильное Название Класса

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

java <.class filename>

А теперь давайте запустим нашу программу:

$ java helloworld
Error: Could not find or load main class helloworld

Да, он потерпел неудачу с ошибкой “Не удалось найти или загрузить основной класс helloworld”.

Как обсуждалось ранее, компилятор сгенерирует файл .class с тем же именем, что и класс Java в программе . Таким образом, в нашем случае основной класс будет иметь имя Hello World , а не hello world .

Давайте попробуем еще раз с правильным корпусом:

$ java HelloWorld
Hello world..!!!

На этот раз все прошло успешно.

3.1. Расширение файла

Чтобы скомпилировать программу на Java, мы должны указать имя файла с его расширением (. java ):

$ javac HelloWorld.java

Но чтобы запустить . class file, нам нужно указать имя класса, а не имя файла. Таким образом, нет необходимости предоставлять расширение .class :

$ java HelloWorld.class
Error: Could not find or load main class HelloWorld.class

Итак, опять же, давайте запустим нашу программу, используя правильное имя класса:

$ java HelloWorld 
Hello world..!!!

4. Имена пакетов Java

В Java мы сохраняем подобные классы вместе в том, что мы называем пакетом /.

Давайте переместим класс HelloWorld в пакет com.baeldung :

package com.baeldung;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world..!!!");
    }
}

Теперь давайте скомпилируем и запустим обновленную программу Hello World , как и раньше:

$ java HelloWorld
Error: Could not find or load main class HelloWorld

Но снова мы получаем ошибку “Не удалось найти или загрузить основной класс HelloWorld”!

Давайте попробуем понять, что же мы здесь упустили.

Чтобы запустить класс Java, который находится в пакете, мы должны указать его полное имя . Поэтому в нашем случае Hello World полное имя com.baeldung.Адский мир .

Теперь, когда мы создали com.baeldung package, мы фактически создали структуру папок, такую как:

com/baeldung/HelloWorld.java

Во-первых, давайте попробуем запустить нашу программу из каталога com/baeldung :

$ java com.baeldung.HelloWorld
Error: Could not find or load main class com.baeldung.HelloWorld

Тем не менее, мы не можем запустить нашу программу.

Здесь, когда мы указали полное имя класса com.baeldung.HelloWorld , Java пытался найти HelloWorld.class файл в com/baeldung , в каталоге, из которого мы запускали программу.

Поскольку мы уже находились внутри com/baeldung , Java не смогла найти и запустить программу HelloWorld .

Теперь давайте вернемся в родительскую папку и запустим ее:

$ java com.baeldung.HelloWorld
Hello world..!!!

Да, мы снова можем сказать “Привет” миру.

5. Недопустимый путь к классу

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

Мы используем переменную classpath, чтобы указать JVM, где найти файлы .class в файловой системе.

Во время выполнения программы мы можем указать путь к классу, используя параметр -classpath . пример:

java -classpath /my_programs/compiled_classes HelloWorld

Здесь Java будет искать HelloWorld.class файл в/ my_programs/compiled_classes папке, имя которой мы только что придумали. По умолчанию переменная пути к классу имеет значение”.”, что означает текущий каталог.

В приведенном выше разделе мы изменили наш каталог для запуска нашей программы. Но что, если мы захотим запустить его из какой-то другой папки? Вот когда переменная classpath помогает нам.

Чтобы запустить нашу программу из каталога com/baeldung , мы можем просто указать, что наш путь к классу состоит из двух каталогов – по одному для каждой части пакета:

$ java -claspath ../../ com.baeldung.HelloWorld
Hello world..!!!

Здесь “..” представляет родительский каталог. В нашем случае “../../” представляет собой вершину иерархии пакетов.

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

В этом уроке мы узнали вероятные причины ошибки “Не удалось найти или загрузить основной класс”.

Затем, конечно, мы также узнали, как решить эту ошибку.