zoukankan      html  css  js  c++  java
  • 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 异常来接收。

  • 相关阅读:
    G
    O
    M
    K-Hero
    J
    G
    F
    Codeforces Round #327 (Div. 2) A Wizards' Duel (水题)
    C++各大有名科学计算库(转)
    矩阵算法 高斯消元 行列式 矩阵的秩
  • 原文地址:https://www.cnblogs.com/hapday/p/6326614.html
Copyright © 2011-2022 走看看