0
点赞
收藏
分享

微信扫一扫

InvocationTargetException异常解析


InvocationTargetException异常由Method.invoke(obj, args...)方法抛出。当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收。

示例:

[java]  ​​view plain​​  ​​copy​​

 ​​print​

​​?​



  1. package com.zzj.test.reflect;  
  2.   
  3. public class Reflect {  
  4. public void run(int i) throws ZeroException {  
  5. new B();  
  6.         b.run(i);  
  7.     }  
  8. }  
  9.   
  10. class B {  
  11. public void run(int i) throws ZeroException {  
  12. if (i < 0) {  
  13. throw new ZeroException("参数不能小于零!");  
  14.         }  
  15. "参数:" + i);  
  16.   
  17.     }  
  18. }  
  19.   
  20. class ZeroException extends Exception {  
  21. private static final long serialVersionUID = 1L;  
  22.   
  23. private String detailMessage;  
  24.   
  25. public ZeroException(String detailMessage) {  
  26. this.detailMessage = detailMessage;  
  27.     }  
  28.   
  29. public String getMessage() {  
  30. return detailMessage;  
  31.     }  
  32. }  

测试:

[java]  ​​view plain​​  ​​copy​​

 ​​print​

​​?​

  1. package com.zzj.test.reflect;  
  2.   
  3. import java.lang.reflect.InvocationTargetException;  
  4. import java.lang.reflect.Method;  
  5.   
  6. public class Test {  
  7. public static void main(String[] args) {  
  8. try {  
  9. "com.zzj.test.reflect.Reflect");  
  10. "run", int.class);  
  11. 1);  
  12. catch (ClassNotFoundException e) {  
  13.             e.printStackTrace();  
  14. catch (SecurityException e) {  
  15.             e.printStackTrace();  
  16. catch (NoSuchMethodException e) {  
  17.             e.printStackTrace();  
  18. catch (IllegalArgumentException e) {  
  19.             e.printStackTrace();  
  20. catch (IllegalAccessException e) {  
  21.             e.printStackTrace();  
  22. catch (InvocationTargetException e) {  
  23. "此处接收被调用方法内部未被捕获的异常");  
  24.             e.printStackTrace();  
  25. catch (InstantiationException e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29. }  

输出:

[plain]  ​​view plain​​  ​​copy​​

 ​​print​

​​?​


  1. 此处接收被调用方法内部未被捕获的异常  
  2. java.lang.reflect.InvocationTargetException  
  3.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  4.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  5.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  6.     at java.lang.reflect.Method.invoke(Unknown Source)  
  7.     at com.zzj.test.reflect.Test.main(Test.java:11)  
  8. Caused by: com.zzj.test.reflect.ZeroException: 参数不能小于零!  
  9.     at com.zzj.test.reflect.B.run(Reflect.java:13)  
  10.     at com.zzj.test.reflect.Reflect.run(Reflect.java:6)  
  11.     ... 5 more  

也可以直接打印目标异常:

[java]  ​​view plain​​  ​​copy​​

 ​​print​

​​?​

  1. package com.zzj.test.reflect;  
  2.   
  3. import java.lang.reflect.InvocationTargetException;  
  4. import java.lang.reflect.Method;  
  5.   
  6. public class Test {  
  7. public static void main(String[] args) {  
  8. try {  
  9. "com.zzj.test.reflect.Reflect");  
  10. "run", int.class);  
  11. 1);  
  12. catch (ClassNotFoundException e) {  
  13.             e.printStackTrace();  
  14. catch (SecurityException e) {  
  15.             e.printStackTrace();  
  16. catch (NoSuchMethodException e) {  
  17.             e.printStackTrace();  
  18. catch (IllegalArgumentException e) {  
  19.             e.printStackTrace();  
  20. catch (IllegalAccessException e) {  
  21.             e.printStackTrace();  
  22. catch (InvocationTargetException e) {  
  23. "此处接收被调用方法内部未被捕获的异常");  
  24. // 获取目标异常  
  25.             t.printStackTrace();  
  26. catch (InstantiationException e) {  
  27.             e.printStackTrace();  
  28.         }  
  29.     }  
  30. }  

输出:

[plain]  ​​view plain​​  ​​copy​​

 ​​print​

​​?​


  1. 此处接收被调用方法内部未被捕获的异常  
  2. com.zzj.test.reflect.ZeroException: 参数不能小于零!  
  3.     at com.zzj.test.reflect.B.run(Reflect.java:13)  
  4.     at com.zzj.test.reflect.Reflect.run(Reflect.java:6)  
  5.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  6.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  7.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  8.     at java.lang.reflect.Method.invoke(Unknown Source)  
  9.     at com.zzj.test.reflect.Test.main(Test.java:11)  
举报

相关推荐

0 条评论