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. 第二篇:呈现内容_第一节:Control呈现

    一.Control的呈现过程 在上个章节““生死有序”的控件生命周期”中,我们提到Render是控件开发的主角,但在控件树的“合成模式(Composite)”部分这位主角却缺席了(戏份太多的缘由).哦 ...

  2. ROC 曲线简要解释

    阳性 (P, positive)阴性 (N, Negative)真阳性 (TP, true positive):正确的肯定.又称:命中 (hit)真阴性 (TN, true negative):正确的 ...

  3. php分享二十六:支付系统设计

    一个典型PHP支付系统的设计与实现 参考:blog.sina.com.cn/s/blog_81f6205801017ec8.html 微信支付开发: http://www.cnblogs.com/tx ...

  4. 复习下C 链表操作(双向链表)

    双向链表 创建.删除.反转.插入 //struct #include <stdio.h> #include <stdlib.h> #include <string.h&g ...

  5. IOS使用AVAudioPlayer播放mp3歌曲文件并监听来电打断

    本实例实现了AVAudioPlayer播放mp3歌曲文件,实现了播放.暂停.继续操作,音乐音量控制.播放进度显示,同时监听来电打断事件 一.控件初始化 - (void)viewDidLoad { [s ...

  6. fpm制做mysql-5.6.33 rpm包

    增加用户: # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin -M -d /data/my_db mysql 源码安装mysql-5 ...

  7. ngx_http_stub_status_module

    ngx_http_stub_status_module是一个Nginx的内置 HTTP模块,该模块可以提供Nginx的状态信息.编译的时候 需指定加载该模块: --with-http_stub_sta ...

  8. Stochastic Gradient Descent收敛判断及收敛速度的控制

    要判断Stochastic Gradient Descent是否收敛,可以像Batch Gradient Descent一样打印出iteration的次数和Cost的函数关系图,然后判断曲线是否呈现下 ...

  9. [Windows Azure] How to use the Queue Storage Service

    How to use the Queue Storage Service version 1.7 version 2.0 This guide will show you how to perform ...

  10. windows下通过Chocolatey安装或升级node.js

    以管理员身份运行windows PowerShell并安装Chocolatey 我的机器是windows10,可以在开始菜单->所有应用->W栏中找到Window PowerShell并运 ...