Java异常处理之InvocationTargetException(反射异常)
Java异常处理之InvocationTargetException(反射异常)
InvocationTargetException异常由Method.invoke(obj, args...)方法抛出。当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收!!!
示例:
- package com.zzj.test.reflect;
- 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;
- }
- }
测试:
- package com.zzj.test.reflect;
- 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
也可以直接打印目标异常:
- package com.zzj.test.reflect;
- 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异常处理之InvocationTargetException(反射异常)的更多相关文章
- Java反射异常处理之InvocationTargetException
java.lang.reflect.InvocationTargetException处理办法可能是没有引commons-lang3-3.x.jar包
- 札记:Java异常处理
异常概述 程序在运行中总会面临一些"意外"情况,良好的代码需要对它们进行预防和处理.大致来说,这些意外情况分三类: 交互输入 用户以非预期的方式使用程序,比如非法输入,不正当的操作 ...
- java异常处理(父子异常的处理)
我当初学java异常处理的时候,对于父子异常的处理,我记得几句话“子类方法只能抛出父类方法所抛出的异常或者是其子异常,子类构造器必须要抛出父类构造器的异常或者其父异常”.那个时候还不知道子类方法为什么 ...
- Java 异常处理
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用System.out ...
- 《转载》Java异常处理的10个最佳实践
本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...
- JAVA 异常处理机制
主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...
- Java异常处理和设计
在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻 ...
- 深入理解java异常处理机制
异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的 ...
- Java提高篇——Java 异常处理
异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用Syst ...
随机推荐
- IAR仿真时绿色箭头一直指向汇编界面,而C界面没有
设置如下
- Maven知识点整理
1. 基础:maven 概念及生命周期 ===>Nexus创建本地Maven仓库(Maven私服) https://www.cnblogs.com/zishengY/p/7794923.html ...
- .net framework多个版本在IIS服务器上时应注意-重新注册IIS-错误Server Application Unavailable
今天客户一个附件上传的应用程序报错,服务器安装了.net 4.0 framework(还有1.0和2.0版本),因为有网站程序需要用到2.0,配置好站点后,附件程序是用的2.0,Mail程序选择版本为 ...
- 从ext4将mysql数据目录移动至lustre出现(InnoDB: Unable to lock ./ibdata1, error: 38.)
因为数据目录过大,因此我把目录从本地移到了共享存储中.在修改了/etc/my.cnf和/etc/init.d/mysqld之后发现数据库可以运行,但启动速度很慢 原因是原文件系统是ext4,而目标文件 ...
- 简简单单搞掂恼人的Laravel 5安装
想折腾下Laravel 5了.Laravel是这世界上最好且没有之一的语言──PHP──的众多框架中的一个,是我比较感兴趣的PHP Web Framework. 但是安装Laravel可不是件容易的事 ...
- unity, Animator.ResetTrigger
解: 正确的写法应该是:Animator.SetTrigger("unfoldTrigger")Animator.ResetTrigger("unfoldTrigger& ...
- Android开源之BaseRecyclerViewAdapterHelper(持续更新!)
官方地址:http://www.recyclerview.org/ 文档 v1.9.8 English 中文 v2.0.0 English 中文 Extension library PinnedSec ...
- C++哪些运算符重载能够重载?
运算符重载是C++极为重要的语言特性之中的一个.本文将用代码实例回答--C++哪些运算符能够重载?怎样重载?实现运算符重载时须要注意哪些? 哪些运算符能够重载,哪些不可重载? C++98,C++0x, ...
- 安卓数据解析之 fastjson 的解析以及Gson解析
在安卓开发过程中的.我们经常使用的数据传递是以json格式传递.安卓 亲爹提供了我们Gson解析工具.点击下载Gson.jar 阿里巴巴FastJson是一个Json处理工具包,包含"序列化 ...
- 菜鸟学Java(十八)——异常
每个学编程的人在编程的过程中都会遇到各种异常.那么当我们遇到异常的时候该怎么处理呢?针对不同的异常我们又该采取什么具体的处理方式呢?这些问题在我开始学编程的很长一段时间里我都不太清楚,还好随着不断的学 ...