最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文深入理解Java中的java.lang.reflect.InvocationTargetException錯誤

 更新時間:2024年03月21日 09:06:52   作者:跡憶客  
這篇文章主要給大家介紹了關(guān)于Java中java.lang.reflect.InvocationTargetException錯誤的相關(guān)資料,java.lang.reflect.InvocationTargetException是Java中的一個異常類,它通常是由反射調(diào)用方法時拋出的異常,需要的朋友可以參考下

Java 中的 java.lang.reflect.InitationTargetException 錯誤

當(dāng)開發(fā)人員使用 Java Reflection API 時,java.lang.reflect.InitationTargetException 是一個非常常見的異常。 檢查的異常保存由調(diào)用的方法或構(gòu)造函數(shù)拋出的異常。

從 JDK 1.4 版本開始,該異常已被改進(jìn)以符合通用異常鏈機(jī)制。 簡而言之,每當(dāng)開發(fā)人員嘗試使用 Method.invoke() 調(diào)用一個類時,我們都會收到 InvocableTargetException ,并且它被 java.lang.reflect.InvokeTargetException 包裹。

java.lang.reflect.InvocableTargetException錯誤的原因

IncationTargetException 主要發(fā)生在開發(fā)人員使用反射層并嘗試調(diào)用本身引發(fā)底層異常的構(gòu)造函數(shù)或方法時。 因此,Java 反射 API 將方法拋出的異常包裝為 InvoicationTargetException。

讓我們看一個代碼示例來更好地理解它。

示例代碼:

import java.lang.reflect.*;

public class Test {
    public int divideByZero() {
        return 89/ 0;
    }

    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
        Test obj = new Test();
        Method method = Test.class.getMethod("divideByZero");
        try {
            method.invoke(obj);
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

輸出:

java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at Test.main(Test.java:13)
Caused by: java.lang.ArithmeticException: / by zero
    at Test.divideByZero(Test.java:6)
    ... 5 more

修復(fù) Java 中的 java.lang.reflect.InitationTargetException 錯誤

根據(jù)上面的內(nèi)容,我們了解到底層異常是導(dǎo)致 java.lang.reflect.InitationTargetException 錯誤的原因。 我們可以使用 Throwable 類的 getCause() 方法獲取有關(guān)底層異常的更多信息。

因此,解決 IncationTargetException 涉及查找并解決底層異常。

示例代碼:

import java.lang.reflect.*;

public class Test {
    public int divideByZero() {
        return 89/ 0;
    }

    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException
    {
        Test obj = new Test();
        Method method = Test.class.getMethod("divideByZero");
        try {
            method.invoke(obj);
        }
        catch (InvocationTargetException e)
        {
            System.out.println(e.getCause());
        }
    }
}

輸出:

java.lang.ArithmeticException: / by zero

在上面的輸出中,實際的底層異常是 ArithmeticException,因為我們除以零而發(fā)生。

一旦我們修復(fù)了底層異常,InitationTargetException 也得到了解決。 以下是完整的工作代碼,無一例外; 我們剛剛刪除了除以零的部分。

完整源代碼:

import java.lang.reflect.*;

public class Test {
    public int divideByZero() {
        return 89/ 9;
    }

    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException
    {
        Test obj = new Test();
        Method method = Test.class.getMethod("divideByZero");
        try {
            method.invoke(obj);
        }
        catch (InvocationTargetException e)
        {
            e.printStackTrace();
        }
    }
}

總結(jié)

在本文中,我們了解了在 Java 中使用反射層時如何包裝底層異常。 我們了解了在使用 java.lang.reflect.InitationTargetException 時如何獲取底層異常以及如何解決它。

到此這篇關(guān)于Java中java.lang.reflect.InvocationTargetException錯誤的文章就介紹到這了,更多相關(guān)java.lang.reflect.InvocationTargetException錯誤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

枞阳县| 邯郸市| 德保县| 瓮安县| 建阳市| 南华县| 太谷县| 遂川县| 枝江市| 辽宁省| 兴国县| 河源市| 敦煌市| 泗阳县| 仪征市| 泰来县| 嘉荫县| 海伦市| 肇源县| 长子县| 峨边| 石景山区| 侯马市| 翁牛特旗| 来安县| 绍兴市| 东港市| 安图县| 闻喜县| 马龙县| 宁陕县| 电白县| 河南省| 滁州市| 九龙城区| 龙陵县| 鹿邑县| 南汇区| 杂多县| 天长市| 琼结县|