Автор оригинала: Pankaj Kumar.
Исключение Java ClassNotFoundException
- Исключение Java ClassNotFoundException возникает, когда приложение пытается загрузить класс, но Загрузчик классов не может найти его в пути к классу.
- Общие причины
java.lang.ClassNotFoundExceptionиспользуютClass.forNameилиClassLoader.loadClassдля загрузки класса, передавая строковое имя класса, и оно не найдено в пути к классу. - Исключение 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.Мой невидимый класс не существует, поэтому, когда мы выполняем вышеуказанную программу, мы получаем следующую трассировку стека исключений.
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 . Подробнее читайте на Java NoClassDefFoundError .
Ссылка: API Doc