zoukankan      html  css  js  c++  java
  • Java异常处理之InvocationTargetException(反射异常)

     Java异常处理之InvocationTargetException(反射异常)

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

    示例:

    1. package com.zzj.test.reflect;  
    2.   
    3. public class Reflect {  
    4.     public void run(int i) throws ZeroException {  
    5.         B b = 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.         System.out.println("参数:" + 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. }  

    测试:

     
    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.             Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");  
    10.             Method method = clazz.getMethod("run", int.class);  
    11.             method.invoke(clazz.newInstance(), -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.             System.out.println("此处接收被调用方法内部未被捕获的异常");  
    24.             e.printStackTrace();  
    25.         } catch (InstantiationException e) {  
    26.             e.printStackTrace();  
    27.         }  
    28.     }  
    29. }  

    输出:

     
    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  

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

     
    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.             Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");  
    10.             Method method = clazz.getMethod("run", int.class);  
    11.             method.invoke(clazz.newInstance(), -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.             System.out.println("此处接收被调用方法内部未被捕获的异常");  
    24.             Throwable t = e.getTargetException();// 获取目标异常  
    25.             t.printStackTrace();  
    26.         } catch (InstantiationException e) {  
    27.             e.printStackTrace();  
    28.         }  
    29.     }  
    30. }  

    输出:

     
    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)  
  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/yjd_hycf_space/p/7765748.html
Copyright © 2011-2022 走看看