InvocationTargetException 異常是在 java.lang.reflect 包中, 所以該異常的產生和反射有關.
package org.simpleit.test; public class Calculator { public int div(int i, int j){ return i / j; } }
package org.simpleit.test; public class TestCalculator { public void testDiv(Calculator calculator, Integer a, Integer b){ System.out.println(calculator.div(a, b)); } }
@SuppressWarnings("unchecked") @Test public void testInvocationTargetException() throws Exception{ TestCalculator testCalculator = new TestCalculator(); Calculator calculator = new Calculator(); Class clazz = TestCalculator.class; Method testDiv = clazz.getDeclaredMethod("testDiv", Calculator.class, Integer.class, Integer.class); //以下代碼會拋出 InvocationTargetException 異常 testDiv.invoke(testCalculator, calculator, 12, 0); }
estDiv.invoke(testCalculator, calculator, 12, 0); 行代碼會拋出 InvocationTargetException 異常, 但若直接testCalculator.testDiv(calculator, 12, 0); 則拋出的卻是 java.lang.ArithmeticException 異常.
結論: 在利用 Method 對象的 invoke 方法調用目標對象的方法時, 若在目標對象的方法內部拋出異常, 會拋出 InvocationTargetException 異常, 該異常包裝了目標對象的方法內部拋出異常, 可以通過調用 InvocationTargetException 異常類的的 getTargetException() 方法得到原始的異常.
本文轉自:http://blog.csdn.net/simpleit/article/details/5415066