1. 程式人生 > >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

轉自:http://blog.csdn.net/zhangzeyuaaa/article/details/39611467 InvocationTargetException異常由Method.invoke(ob

Java反射異常處理InvocationTargetException

InvocationTargetException異常由Method.invoke(obj, args...)方法丟擲。當被呼叫的方法的內部丟擲了異常而沒有被捕獲時,將由此異常接收。 示例:packa

SpringBoot中異常處理InvocationTargetException

InvocationTargetException異常由Method.invoke(obj, args...)方法丟擲。 當被呼叫的方法的內部丟擲了異常而沒有被捕獲時,將由此異常接收。 不要覺得這個異常很難哦 可能就是你的程式碼有缺陷,具體異常再看報錯情況

Java開發知識Java異常處理

ssa run 範圍 com 行處理 意思 操作 spa exce       Java開發知識之Java的異常處理 一丶異常概述   在講解異常之前,我們要搞清楚.什麽是異常. 通俗理解就是我們編寫的程序出問題了.進行處理的一種手段. 比如我們的QQ.有的時候就崩潰了.比

java 異常處理宣告丟擲異常

java 異常處理宣告丟擲異常 2.宣告丟擲異常是Java中處理異常的第二種方式 2.宣告丟擲異常是Java中處理異常的第二種方式 如果一個方法(中的語句執行時)可能生成某種異常,但是並不能確定如何處理這種異常,則此方

java中的異常處理try catch塊的簡單應用

java中的異常根據是否需要人為處理分為倆種: A:非受查異常:派生於Error類,與RuntimeException類(執行時異常)的所有異常。 B:受查異常----:所有不屬於非受查異常類的異常(包

Java 異常處理 例項

package com.exception2; /* 題目: 老師正在給學生上課, 突然某個學生說網路斷了, 老師你來幫助處理一下 沒辦法,我只能去找網管 */ public class TestException3//網管類 {

Java 異常處理 捕獲處理流程

package com.exception2; /* * 注意: 1. 當異常發生的時候,程式會終止,其後面的程式碼不會執行. 2. 異常分為編譯時異常和執行期異常 編譯期異常必須用 try{}catch{}捕獲,執行期異常可以不捕獲 編譯期異常從 Except

java異常處理自定義異常

    在實際開發中,開發人員往往需要定義一些異常類用於描述自身程式中的異常資訊,以區分其他程式的異常資訊。就需要自定義異常類。        實現自定義異常類的方法如下:    1、類java.lang.Throwable是所有異常類的基類,它包括兩個子類:Exceptio

【面試加分項】java異常處理try_catch_finally

try_catch_finally大家應該用的很多,不少人也瞭解一些他們的執行順序,可是它真的有這麼簡單麼,下面我們先來看一段程式碼,大家想想他的執行結果是什麼? public class TestException { int goabl=1

java入門---異常處理例項多個異常處理(多個catch)

    對異常的處理時,首先就是在宣告異常時,建議宣告更為具體的異常,這樣可以處理的更具體。然後呢,對方宣告幾個異常,就對應幾個catch塊, 如果多個catch塊中的異常出現繼承關係,父類異常catc

java入門---異常處理例項使用 catch 處理異常

    以下例項演示了使用 catch 來處理異常的方法:public class Main {    public static void main (String args[]) {       

java異常處理throw, throws,try和catch

    程式執行過程中可能會出現異常情況,比如被0除、對負數計算平方根等,還有可能會出現致命的錯誤,比如記憶體不足,磁碟損壞無法讀取檔案等,對於異常和錯誤情況的處理,統稱為異常處理。    Java異常處理主要通過5個關鍵字控制:try、catch、throw、throws和

java異常處理機制 throw拋出自定義業務邏輯異常 throws繼續拋出 catch捕獲後會自動繼續拋向調用方法

異常處理機制 ... cep super finally sta exc ace 避免 package com.swift; public class Exception_TestC { public static void main(String[] arg

C語言異常處理 setjmp()和longjmp()

divide font 變量 bsp ron 否則 sharp highlight == 異常處理之除0情況 相信大家處理除0時,都會通過函數,然後判斷除數是否為0,代碼如下所示: double divide(doublea,double b) { co

Java異常處理機制(下)

return語句 異常處理 如果 exce java urn 冒泡 開始 追溯 異常,是在執行函數時出錯導致的,而函數是層層嵌套的層級調用,形成調用棧。因此,多層嵌套函數中一個出現錯誤,其余的也都會出錯不能執行。當這些函數全部輸出異常信息時就形成異常追蹤棧。 最開始發生異常

Java基礎——異常處理

外部 程序員 基於 新的 常對象 ret 調用棧 span ice   在程序運行過程中,如果JVM檢測出一個不可能執行的操作,就會出現運行時錯誤。   在Java中,運行時錯誤會作為異常拋出。異常就是一個對象,表示阻止正常進行程序執行的錯誤或者情況。如果異常沒有被處理,那

java反射機制應用動態代理

代理類 過多 size bject interface 並且 編譯期 代理 抽象 1.靜態代理類和動態代理類區別 靜態代理:要求被代理類和代理類同時實現相應的一套接口;通過代理類的對象調用重寫接口的方法時,實際上執行的是被代理類的同樣的 方法的調用。 動態代理:在程序運

Java學習---異常處理的學習

沒有 splay finall dea 收集 lap img 常見 描述 基礎知識 任何一門計算機程序設計語言都包括有絕對正確和相對正確的語句。絕對正確: 指任何情況下, 程序都會按照流程正確執行;相對正確: 程序的運行受到運行環境的制約, 在這種情況下, 需

Go語言的異常處理errors,panic, recover

package errors func text import type project args normal error接口:源碼 Go語言引入了一個關於錯誤處理的標準模式,即error接口,它是Go語言內建的接口類型,該接口的定義如下: type error inte