Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
10 Июл 2023
2 мин
2697

Исключение java.lang.reflect.InvocationTargetException в Java

Java.lang.reflect.InvocationTargetException является оберткой для исключения, которое было вызвано вызванным методом. Если вызванный метод в свою очередь вызывает другой

Java.lang.reflect.InvocationTargetException является оберткой для исключения, которое было вызвано вызванным методом. Если вызванный метод в свою очередь вызывает другой метод, и этот второй метод вызывает исключение, это исключение будет «завернуто» в InvocationTargetException.

Разработка на Java — востребованное направление, такие специалисты будут нужны на рынке еще долго. На курсе «Java-разработчик» от Skypro освоить профессию можно с нуля за 11 месяцев, даже если вы гуманитарий и ничего не знаете об IT. Программа составлена от простого к сложному и адаптирована для новичков. Преподаватели — практикующие специалисты из крупных компаний: «Сбер», «Самокат» и других.

Пример

public class Test {
    public void testMethod() {
        throw new RuntimeException("Test");
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        Test test = new Test();
        Method method = Test.class.getMethod("testMethod");
        try {
            method.invoke(test);
        } catch (InvocationTargetException e) {
            throw e.getCause();
        }
    }
}

В данном примере вызов method.invoke(test); вызывает исключение RuntimeException("Test"), которое исходит из метода testMethod(). Это исключение затем «заворачивается» в InvocationTargetException.

Причины и решение

InvocationTargetException является оберткой, и основное исключение, которое было вызвано в вызываемом методе, можно получить, вызвав метод getCause() у объекта InvocationTargetException.

В обратной стороне этого исключения содержится стек вызовов, который ведет к методу, где было вызвано исключение. Это помогает в отладке, так как позволяет быстро найти место, в котором возникло исключение.

Поэтому, когда возникает InvocationTargetException, важно получить исходное исключение с помощью метода getCause() и обработать его, вместо того чтобы просто ловить InvocationTargetException. Это поможет выявить истинную причину проблемы.

try {
    method.invoke(object, args);
} catch (InvocationTargetException e) {
    Throwable cause = e.getCause();
    // обрабатываем исключение cause
}

В данном примере cause будет исключением, которое было вызвано внутри вызываемого метода. Обработка исключения cause дает больше информации о проблеме и помогает быстрее найти и исправить ее.

В Skypro на курсе «Java-разработчик» вы научитесь писать программы для игр и приложений, освоите все нужные инструменты: Git, GitHub, Docker, Swagger, PostgreSQL и другие. Потренируетесь под руководством опытных наставников и соберете сильное портфолио. На курсе действует гарантия трудоустройства: поможем вам найти работу или вернем деньги за курс.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий