第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

請(qǐng)問(wèn)下java Method invoke 拋出異常,該怎么解決?

請(qǐng)問(wèn)下java Method invoke 拋出異常,該怎么解決?

撒科打諢 2022-04-21 16:11:28
在使用Method的invoke方法時(shí),所調(diào)用的函數(shù)原有的異常如何按照原來(lái)的異常類型拋出?
查看完整描述

3 回答

?
長(zhǎng)風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

InvocationTargetException異常由Method.invoke(obj, args...)方法拋出。當(dāng)被調(diào)用的方法的內(nèi)部拋出了異常而沒(méi)有被捕獲時(shí),將由此異常接收。
示例:
package com.zzj.test.reflect;

public class Reflect {
public void run(int i) throws ZeroException {
B b = new B();
b.run(i);
}
}

class B {
public void run(int i) throws ZeroException {
if (i < 0) {
throw new ZeroException("參數(shù)不能小于零!");
}
System.out.println("參數(shù):" + i);

}
}

class ZeroException extends Exception {
private static final long serialVersionUID = 1L;

private String detailMessage;

public ZeroException(String detailMessage) {
this.detailMessage = detailMessage;
}

public String getMessage() {
return detailMessage;
}
}
測(cè)試:
package com.zzj.test.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");
Method method = clazz.getMethod("run", int.class);
method.invoke(clazz.newInstance(), -1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
System.out.println("此處接收被調(diào)用方法內(nèi)部未被捕獲的異常");
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
輸出:
此處接收被調(diào)用方法內(nèi)部未被捕獲的異常
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.zzj.test.reflect.Test.main(Test.java:11)
Caused by: com.zzj.test.reflect.ZeroException: 參數(shù)不能小于零!
at com.zzj.test.reflect.B.run(Reflect.java:13)
at com.zzj.test.reflect.Reflect.run(Reflect.java:6)
... 5 more
也可以直接打印目標(biāo)異常:
package com.zzj.test.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");
Method method = clazz.getMethod("run", int.class);
method.invoke(clazz.newInstance(), -1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
System.out.println("此處接收被調(diào)用方法內(nèi)部未被捕獲的異常");
Throwable t = e.getTargetException();// 獲取目標(biāo)異常
t.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
輸出:
此處接收被調(diào)用方法內(nèi)部未被捕獲的異常
com.zzj.test.reflect.ZeroException: 參數(shù)不能小于零!
at com.zzj.test.reflect.B.run(Reflect.java:13)
at com.zzj.test.reflect.Reflect.run(Reflect.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.zzj.test.reflect.Test.main(Test.java:11)



查看完整回答
反對(duì) 回復(fù) 2022-04-24
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊

java.lang.reflec.InvocationTargetException
捕獲這個(gè)異常,然后通過(guò)getTargetException() 方法獲得異常,這個(gè)可以獲得原方法拋出的異常。
然后可以通過(guò)類型判斷,判斷到底拋出的是原異常的哪一個(gè)異常。


查看完整回答
反對(duì) 回復(fù) 2022-04-24
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

Class<?>[]getExceptionTypes()
返回 Class 對(duì)象的數(shù)組,這些對(duì)象描述了聲明將此 Method 對(duì)象表示的底層方法拋出的異常類型。Method對(duì)象通過(guò)該方法可以的到方法聲明時(shí)異常拋出的類型,可以手工判斷進(jìn)行拋出,但是有一點(diǎn)給注意,如果在運(yùn)行時(shí)拋出異常 如 RuntimeException類型的錯(cuò)誤,如果再聲明里沒(méi)有寫明,應(yīng)該領(lǐng)去處理。

查看完整回答
反對(duì) 回復(fù) 2022-04-24
  • 3 回答
  • 0 關(guān)注
  • 815 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)