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

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

示例:

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

测试:

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

输出:

  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. import java.lang.reflect.InvocationTargetException;
  3. import java.lang.reflect.Method;
  4. public class Test {
  5. public static void main(String[] args) {
  6. try {
  7. Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");
  8. Method method = clazz.getMethod("run", int.class);
  9. method.invoke(clazz.newInstance(), -1);
  10. } catch (ClassNotFoundException e) {
  11. e.printStackTrace();
  12. } catch (SecurityException e) {
  13. e.printStackTrace();
  14. } catch (NoSuchMethodException e) {
  15. e.printStackTrace();
  16. } catch (IllegalArgumentException e) {
  17. e.printStackTrace();
  18. } catch (IllegalAccessException e) {
  19. e.printStackTrace();
  20. } catch (InvocationTargetException e) {
  21. System.out.println("此处接收被调用方法内部未被捕获的异常");
  22. Throwable t = e.getTargetException();// 获取目标异常
  23. t.printStackTrace();
  24. } catch (InstantiationException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }

输出:

  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)

Java异常处理之InvocationTargetException(反射异常)的更多相关文章

  1. Java反射异常处理之InvocationTargetException

    java.lang.reflect.InvocationTargetException处理办法可能是没有引commons-lang3-3.x.jar包

  2. 札记:Java异常处理

    异常概述 程序在运行中总会面临一些"意外"情况,良好的代码需要对它们进行预防和处理.大致来说,这些意外情况分三类: 交互输入 用户以非预期的方式使用程序,比如非法输入,不正当的操作 ...

  3. java异常处理(父子异常的处理)

    我当初学java异常处理的时候,对于父子异常的处理,我记得几句话“子类方法只能抛出父类方法所抛出的异常或者是其子异常,子类构造器必须要抛出父类构造器的异常或者其父异常”.那个时候还不知道子类方法为什么 ...

  4. Java 异常处理

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用System.out ...

  5. 《转载》Java异常处理的10个最佳实践

    本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...

  6. JAVA 异常处理机制

    主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...

  7. Java异常处理和设计

    在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻 ...

  8. 深入理解java异常处理机制

       异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的 ...

  9. Java提高篇——Java 异常处理

    异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用Syst ...

随机推荐

  1. 查看Linux内核及发行商版本命令

    一.查看Linux内核版本命令(两种方法): 1. cat /proc/version Linux version -.el7.x86_64 (builder@kbuilder.dev.centos. ...

  2. debian搭建本地镜像源

    1. 安装apt-mirror apt-get install apt-mirror 2. 配置apt-mirror vim /etc/apt/mirror.list 2.1 下载目录什么的基础配置建 ...

  3. DCM 图片查看

    因为要处理一些医学图像,需要把dcm格式的文件转换成jpg格式.本来用Sante DICOM Editor用得挺好的,方便查看dcm文件,但是在转换上每次只能转一张(本人没有找到用该软件批量转格式的方 ...

  4. Java 8 – Convert List to Map

    Java 8 – Convert List to Map package com.mkyong.java8 public class Hosting { private int Id; private ...

  5. jota-time 练习

    public static void main(String[] args) { LocalDate now = new LocalDate(); //输出形式为yyyy-MM-dd System.o ...

  6. 怎么部署 .NET Core Web项目 到linux

    .NET Core is free, open source, cross platform and runs basically everywhere. STEP 0 - GET A CHEAP H ...

  7. 如何分析Java程序中的死锁

    使用下面方式:产生java的Thread Dump信息 windows平台上:ctrl+break 或者 ctrl+(fn+b)键 Linux平台上:kill -3 pid (查找程序进程id -&g ...

  8. sql索引唯一

    alter table et_tb_1111 add constraint tbunique unique (itemid) alter table 表名 add constraint 约束名 uni ...

  9. 【Unity】3.1 利用内置的3D对象创建三维模型

    分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...

  10. [SQL Server 2014] 微软将于年底发布新版数据库SQL Server 2014

    在今年的TechEd大会上,微软宣布SQL Server 2014的第一个技术预览版.SQL Server 2014的重点包括内存OLTP.实时的大数据分析.支持混合云端,以及提供更完整的商业智能(B ...