嗯,我試圖理解和讀到的東西可能會導致它,但我只是無法得到它:什麼可能導致java.lang.reflect.InvocationTargetException?
我有我的代碼某處這樣的:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
的事情是,當它試圖調用它拋出的某些方法 InvocationTargetException
而不是某些其他預期的異常(具體爲ArrayIndexOutOfBoundsException
)。 正如我真的知道調用什麼方法,我直接去了這個方法代碼,並添加了一個try-catch塊,假設這個代碼塊會拋出ArrayIndexOutOfBoundsException
,並且它真的按照預期投擲了ArrayIndexOutOfBoundsException
。然而,當它上漲時 以某種方式改變爲InvocationTargetException
並且在上面的代碼中catch(Exception e)
e是InvocationTargetException
而不是ArrayIndexOutOfBoundsException
如預期的那樣。
什麼會導致這樣的行爲,或者我該如何檢查這樣的事情?
謝謝,但是我會怎樣區分(AssertionError e)和(Exception e)?如果我在展開原因之前總是首先得到InvocationTargetException,那麼每個異常之間的區別在哪裏? – user550413 2011-05-16 17:32:51
@ user550413:當然,解開異常並檢查它。你可以隨時扔掉它,如果必須的話就可以用它來捕捉它。 – 2011-05-16 17:53:21
對於任何人想知道「在InvocationTargetException中解開原因」是什麼意思,我只是發現如果你使用'exception.printStackTrace()'打印它,你只需看看「Caused By:」而不是上半部分/正常部分。 – Jan 2012-02-10 19:42:39