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

1. Введение

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

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

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

Начнем с программы HelloWorld :

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 

Теперь запустим нашу программу:

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

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

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

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

$ java HelloWorld Hello world..!!!

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

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

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

$ javac HelloWorld.java

Но для запуска. class файла, нам нужно указать имя класса, а не имя файла. Таким образом, нет необходимости предоставлять расширение .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..!!!"); } }

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

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

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

Попробуем понять, что мы здесь упустили.

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

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

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 установлено значение «.», Что означает текущий каталог.

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

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

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

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

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

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

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