InvocationTargetException异常

package com.smbea.demo.reflect;

/**
 * 越界异常
 * @author hapday
 * @date 2017年1月20日 @time下午7:59:01
 */
public class OverstepBoundaryException extends Exception {

	/**
	 *
	 */
	private static final long serialVersionUID = 1L;

	private String message;

	public String getMessage() {
		return message;
	}

	public OverstepBoundaryException(String message) {
		this.message = message;
	}

}

package com.smbea.demo.reflect;

public class B {
	public void say(int cursor) throws OverstepBoundaryException{
		double number [] = new double[5];

		for(int index = 0; index < 5; index++) {
			number[index] = Math.random();
		}

		if(0 > cursor) {
			throw new OverstepBoundaryException("数组索引不可以小于 0!");
		}
		if(4 < cursor) {
			throw new OverstepBoundaryException("数组索引不可以大于 5!");
		}

		System.out.println("cursor = " + cursor + ", number[" + cursor + "] = " + number[cursor]);
	}
}

package com.smbea.demo.reflect;

/**
 * 当被调用的方法内部出现了异常,而未被捕获时,将由 InvocationTargetException 异常来接收
 * @author hapday
 * @date 2017年1月20日 @time下午8:21:04
 */
public class A {
	public void print(int length) throws OverstepBoundaryException {
		B b = new B();
		b.say(length);
	}
}

package com.smbea.demo.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * InvocationTargetException 异常的抛出通常是一个方法调用另一个方法时,都未捕获方法中的异常
 * @author hapday
 * @date 2017年1月20日 @time下午8:16:50
 */
public class Test {
	public static void main(String[] args) {
		try {
			Class<?> clazz = Class.forName("com.smbea.demo.reflect.A");
			try {
				Method method = clazz.getMethod("print", int.class);
				try {
					method.invoke(clazz.newInstance(), 5);
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					System.out.println("此处接收了方法内部未被捕获的异常。");
					e.printStackTrace();
				} catch (InstantiationException e) {
					e.printStackTrace();
				}
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

package com.smbea.demo.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * InvocationTargetException 异常的抛出通常是一个方法调用另一个方法时,都未捕获方法中的异常
 * @author hapday
 * @date 2017年1月20日 @time下午8:16:50
 */
public class Test2 {
	public static void main(String[] args) {
		try {
			Class<?> clazz = Class.forName("com.smbea.demo.reflect.A");
			try {
				Method method = clazz.getMethod("print", int.class);
				try {
					method.invoke(clazz.newInstance(), -1);
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					System.out.println("此处接收了方法内部未被捕获的异常。");
					Throwable throwable = e.getTargetException();
					throwable.printStackTrace();
				} catch (InstantiationException e) {
					e.printStackTrace();
				}
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

  当被调用的方法内部出现了异常而未被捕获时,将由 InvocationTargetException 异常来接收。

时间: 2024-08-25 23:05:18

InvocationTargetException异常的相关文章

InvocationTargetException异常的深入研究-servlet的setAttribute与getAttribute

在某项目中,前端jsp传入的用户id数据通过session域传入后台servlet进行处理的过程中,无意间出现了InvocationTargetException异常 前端部分代码如下:测试代码,非原项目代码 1 // 登录处理源码 2 if ("student".equals(role)) { 3 // 学生登录 4 // 创建学生服务对象 5 StudentService ss = new StudentServiceImpl(); 6 // 调用服务中的登录进程 7 Studen

org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException异常解决

org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246) org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178) org.apache.struts2.json.JSONWriter.p

json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

1 //存储Product对象的集合是从,Product是从mysql数据库中查询并添加的 2 ArrayList<Product> list = new ArrayList<Product>(); 3 4 //设置响应对象编码 5 response.setCharacterEncoding("utf-8"); 6 response.setContentType("text/html;charset=utf-8"); 7 8 //将list集

在linux环境下报错java.lang.reflect.InvocationTargetException

今天开发了一个excel导出的功能,放到linux服务器上后发现报错. 捕获的异常是 InvocationTargetException 异常,之前没有见过这个异常,网上搜了一下. 内容如下: 在某一个项目A中使用了某个jar包x.jar, 而x.jar引入了一个类Y, 应该包含y.jar才可以使用Y类. 但是y.jar没有被包含到工程中, 这时候就会在项目A中跑出InvocationTargetException. 这个错是指找不到jar包而使用了这个jar包下面的类,查了源码发现是这个类引起

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

Java设计模式学习笔记,一:单例模式

开始学习Java的设计模式,因为做了很多年C语言,所以语言基础的学习很快,但是面向过程向面向对象的编程思想的转变还是需要耗费很多的代码量的.所有希望通过设计模式的学习,能更深入的学习. 把学习过程中的笔记,记录下来,只记干货. 第一部分:单例模式的内容 单例模式:类只能有一个实例. 类的特点:1.私有构造器:2.内部构造实例对象:3.对外提供获取唯一实例的public方法. 常见的单例模式实现有五种形式: 1.饿汉式. 2.懒汉式. 3.双重检查锁式. 4.静态内部类式. 5.枚举式. 以下分别

JDBC操作数据库的三种方式比较

JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL.oracle.DB2等关系型数据库均是通过JDBC来访问的,现在主流的ORM框架Hibernate.Mybatis等均是在JDBC的基础上做的进一步封装.优化.一般小型的项目,可以直接用JDBC来访问数据库,简单方便.我在进过几个项目后,总结了三总JDBC的基本用法,对这几种用法做一个总结. 第一种

JavaWeb项目笔记包括jsp的用法selevt,HTML5

-------------------<认识HTML5>----------------- 1 <>生成的快捷键 是table键 ctrl+D是直接复制一行 2 <h1>-<h6> 标题 字体由大到小 <p> 段落 <br> 换行标签 <hr> 水平线标签 <em> 斜体 <strong> 字体加粗 ../ 返回上一级目录 > 大于号 < 小于号   空格 " 引号"

spring-mybatis整合项目 异常处理

java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.interna