Класс ClassNotFoundException
Класс ClassNotFoundException - это проверяемое
исключение (checked exception), которое наследуется от
класса Exception. Оно выбрасывается, когда
приложение пытается загрузить класс по его строковому
имени с помощью методов Class.forName,
ClassLoader.loadClass или
ClassLoader.findSystemClass, но класс
с указанным именем не найден в classpath.
Данное исключение сигнализирует о том, что либо имя
класса указано неверно, либо соответствующий
jar-файл или директория с классом отсутствует
в classpath приложения.
Поскольку ClassNotFoundException является
проверяемым исключением, его необходимо либо
обработать с помощью блоков try и
catch, либо объявить в сигнатуре метода
с помощью ключевого слова throws.
Синтаксис
Class.forName("com.example.MyClass")
Метод Class.forName принимает в качестве
параметра полное имя класса (с указанием пакета)
и возвращает объект типа Class. Если класс
не найден, выбрасывается исключение
ClassNotFoundException.
Пример
Давайте попробуем загрузить несуществующий класс и обработаем возникшее исключение:
public class Main
{
public static void main(String[] args)
{
try
{
Class<?> clazz = Class.forName("com.example.NonExistent");
System.out.println("Class loaded: " + clazz.getName());
}
catch (ClassNotFoundException e)
{
System.out.println("Class not found: " + e.getMessage());
}
}
}
Результат выполнения кода:
"Class not found: com.example.NonExistent"
Пример
Давайте загрузим существующий класс из стандартной библиотеки Java и выведем его полное имя:
public class Main
{
public static void main(String[] args)
{
try
{
Class<?> clazz = Class.forName("java.lang.String");
System.out.println("Class loaded: " + clazz.getName());
}
catch (ClassNotFoundException e)
{
System.out.println("Class not found: " + e.getMessage());
}
}
}
Результат выполнения кода:
"Class loaded: java.lang.String"
Пример
Давайте воспользуемся загрузчиком классов
ClassLoader для загрузки класса по имени
и обработаем исключение:
public class Main
{
public static void main(String[] args)
{
ClassLoader loader = Main.class.getClassLoader();
try
{
Class<?> clazz = loader.loadClass("java.util.ArrayList");
System.out.println("Class loaded: " + clazz.getName());
}
catch (ClassNotFoundException e)
{
System.out.println("Class not found: " + e.getMessage());
}
}
}
Результат выполнения кода:
"Class loaded: java.util.ArrayList"
Пример
Давайте объявим исключение ClassNotFoundException
в сигнатуре метода с помощью ключевого слова
throws и обработаем его в вызывающем коде:
public class Main
{
public static Class<?> loadClass(String name) throws ClassNotFoundException
{
return Class.forName(name);
}
public static void main(String[] args)
{
try
{
Class<?> clazz = loadClass("com.example.Missing");
System.out.println("Class loaded: " + clazz.getName());
}
catch (ClassNotFoundException e)
{
System.out.println("Class not found: " + e.getMessage());
}
}
}
Результат выполнения кода:
"Class not found: com.example.Missing"