Java异常处理之InvocationTargetException(反射异常)详解编程语言
2023-06-13 09:20:35 时间
InvocationTargetException异常由Method.invoke(obj, args )方法抛出。当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收!!!
示例:
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( 参数不能小于零! ); } System.out.println( 参数: + 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; } }
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( 此处接收被调用方法内部未被捕获的异常 ); e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } }
此处接收被调用方法内部未被捕获的异常 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: 参数不能小于零! at com.zzj.test.reflect.B.run(Reflect.java:13) at com.zzj.test.reflect.Reflect.run(Reflect.java:6) 5 more
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( 此处接收被调用方法内部未被捕获的异常 ); Throwable t = e.getTargetException();// 获取目标异常 t.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } }
此处接收被调用方法内部未被捕获的异常 com.zzj.test.reflect.ZeroException: 参数不能小于零! 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)
相关文章
- java random函数原理_详解JAVA中Random()函数的用法
- eclipse Java项目 动态Java项目 导入MySQL驱动jar包[通俗易懂]
- Java异常处理简单实例
- java反射菜鸟教程_Java反射
- java打印数组_Java中打印数组的三种方式
- Java中CAS 基本实现原理「建议收藏」
- mybatis异常invalid comparison: java.util.Date and java.lang.String
- 【Java-Set转List】
- java 反射getmethod_Java 反射机制中 getMethod()和getDeclaredField()区别
- java 常量表达式,需要常量表达式? (Java switch语句)[通俗易懂]
- Redis Java整合
- Java 代码审计基础知识 — java反射机制
- java设计模式之解释器模式详解架构师
- Java程序员该如何转型大数据方向详解大数据
- 深入理解Java中的String详解编程语言
- MySQL与Java互调:构建高效业务系统(mysql调用java)
- 解锁Java 与 Oracle 的连接之门(java连接oracle)
- 互操作Java与Redis缓存互操作实践(redis缓存与java)
- Linux下搭建 Java 开发环境(linux搭建java环境)
- 通往成功的道路通过Java考证Oracle获取更高的成就(java考证oracle)
- Java 开发提升Oracle数据库性能(java开发oracle)
- 深入理解Java编程中异常处理的优劣