InvocationTargetException异常解析

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

示例:

[java] view
plain
 copy

 print?

  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. }  

测试:

[java] view
plain
 copy

 print?

  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. }  

输出:

[plain] view
plain
 copy

 print?

  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  

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

[java] view
plain
 copy

 print?

  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. }  

输出:

[plain] view
plain
 copy

 print?

  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)  
时间: 2024-10-30 12:27:34

InvocationTargetException异常解析的相关文章

从jsp中调用Applet,出现java.lang.reflect.InvocationTargetException异常

问题描述 项目中通过jsp访问硬件,使用Applet访问硬件com串口,但是,从jsp中访问applet中的方法时,提示java.lang.reflect.InvocationTargetException错误,此方法中包括了访问硬件com串口的类.另外,单独作为一个application运行这样applet,是正常的. 解决方案 解决方案二:LZ把堆栈最好都贴出来,如果可以还有报错代码段.解决方案三:是不是你引入了其他的Jar包,但是这个Applet找不到这个Jar包导致的这种包冲突最难搞了

解析Java中的Field类和Method类_java

Field类Field类中定义了一些方法,可以用来查询字段的类型以及设置或读取字段的值.将这些方法与继承而来的member方法结合在一起.就可以使我们能够找出有关字段声明的全部信息,并且能够操纵某个特定对象或类的字段. getGenericType方法返回表示字段的声明类型的Type实例.对于像String或int这样的平凡类型,该方法将返回与其相关联的Class对象,例如String.class和int.classo对于像List < Stri ng>这样的参数化类型,该方法将返回Param

Spring MVC 详解

第一章 Web MVC简介Web MVC简介 1.1.Web开发中的请求-响应模型:   在Web世界里,具体步骤如下: 1.  Web浏览器(如IE)发起请求,如访问http://sishuok.com 2.  Web服务器(如Tomcat)接收请求,处理请求(比如用户新增,则将把用户保存一下),最后产生响应(一般为html). 3.web服务器处理完成后,返回内容给web客户端(一般就是我们的浏览器),客户端对接收的内容进行处理(如web浏览器将会对接收到的html内容进行渲染以展示给客户)

反射 注解-Java利用反射执行框架注入类的非静态方法

问题描述 Java利用反射执行框架注入类的非静态方法 之前对代码做优化,利用了反射去执行指定类的指定方法: public static JsonResultVO callMethod(Class<?> className String methodName Class<?>[] paramClass Object[] param) { JsonResultVO resultVO = new JsonResultVO(); try { Method m = className.get

OssImport系列之五——常见问题及排除

相关文章:OssImport系列之一--架构 1. UnsupportedClassVersionError异常 执行命令时异常: Exception in thread "main" java.lang.UnsupportedClassVersionError: com/aliyun/ossimport2/OSSImport2 : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Na

Spring Boot 定制URL匹配规则的方法

事情的起源:有人问我,说编写了一个/hello访问路径,但是吧,不管是输入/hello还是/hello.html,还是/hello.xxx都能进行访问.当时我还以为他对代码进行处理了,后来发现不是,后来发现这是Spring Boot路由规则.好了,有废话了下,那么看看我们解决上面这个导致的问题. 构建web应用程序时,并不是所有的URL请求都遵循默认的规则.有时,我们希望RESTful URL匹配的时候包含定界符".",这种情况在Spring中可以称之为"定界符定义的格式&q

spring mvc-SpringMvc无法访问后台

问题描述 SpringMvc无法访问后台 web.xml<?xml version=""1.0"" encoding=""UTF-8""?> xmlns=""http://java.sun.com/xml/ns/javaee"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""

烽火18台系列之十——钓鱼网站监控的需求与实战

身边的网络钓鱼 提到钓鱼网站,大家再熟悉不过了.如果您是网站运维人员,尤其是金融.电子商务.教育行业的,很有可能就经历过自己的网站被仿冒的事件.如果作为个人,我敢说您百分百经历过钓鱼事件.比如您一定收到过以下类似信息: 1.运营商良心发现: 钓鱼短信 2.邮箱都知道我业务多: 钓鱼邮件 3.又或者好久不见的同学的突然问候: 钓鱼微信 这一切可能都是发生在您身边的钓鱼事件.网络钓鱼已形成庞大的黑色产业,在网上简单搜索,你就会发现一系列网络钓鱼工具,其仿造的网站也是多种多样,甚至可以进行定制.下面就

Spring思维导图,让Spring不再难懂(mvc篇)

写在前面 温故而知新,今天一起来复习一下spring mvc的内容吧. spring mvc简介与运行原理 Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射.视图渲染.本地化.时区与主题渲染等,甚至还能支持文件上传. (1) Http请求:客户端请求提交到DispatcherServlet. (2) 寻找处理器:由DispatcherServlet控制器查询一个或多个Handl