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