Поиск по сайту:

Java ClassNotFoundException - java.lang.ClassNotFoundException


Java ClassNotFoundException

  • Java ClassNotFoundException возникает, когда приложение пытается загрузить класс, но загрузчик классов не может найти его в пути к классам.
  • Общими причинами java.lang.ClassNotFoundException являются использование Class.forName или ClassLoader.loadClass для загрузки класса путем передачи имени String класс, и он не найден в пути к классам.
  • ClassNotFoundException — это проверенное исключение, поэтому оно должно быть перехвачено или передано вызывающей стороне.
  • Исключение ClassNotFoundException всегда возникает во время выполнения, поскольку мы косвенно загружаем класс с помощью загрузчика классов. Компилятор Java не может узнать, будет ли класс присутствовать в пути к классам во время выполнения или нет.
  • Одним из наиболее распространенных примеров ClassNotFoundException является ситуация, когда мы пытаемся загрузить драйверы JDBC, используя Class.forName, но забываем добавить его jar-файл в путь к классам.

Пример Java ClassNotFoundException

Давайте рассмотрим простой пример, в котором мы получим ClassNotFoundException.

package com.journaldev.exceptions;

public class DataTest {

  public static void main(String[] args) {
    try {
      Class.forName("com.journaldev.MyInvisibleClass");

      ClassLoader.getSystemClassLoader().loadClass("com.journaldev.MyInvisibleClass");

      ClassLoader.getPlatformClassLoader().loadClass("com.journaldev.MyInvisibleClass");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }

}

Обратите внимание, что com.journaldev.MyInvisibleClass не существует, поэтому, когда мы выполняем вышеуказанную программу, мы получаем следующую трассировку стека исключений.

java.lang.ClassNotFoundException: com.journaldev.MyInvisibleClass
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:292)
	at com.journaldev.exceptions.DataTest.main(DataTest.java:7)

В приведенном выше примере все три оператора вызовут исключение java.lang.ClassNotFoundException.

Как разрешить исключение ClassNotFoundException

Исправить ClassNotFoundException очень легко, потому что трассировка стека исключений четко указывает, что класс не найден. Просто проверьте настройки пути к классам и убедитесь, что класс присутствует во время выполнения.

ClassNotFoundException против NoClassDefFoundError

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