1. 程式人生 > >轉: Java反射異常處理之InvocationTargetException

轉: Java反射異常處理之InvocationTargetException

轉自:http://blog.csdn.net/zhangzeyuaaa/article/details/39611467

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

示例:

[java] view plain copy  print?
  1. package com.zzj.test.reflect;  
  2. publicclass Reflect {  
  3.     publicvoid run(int i) throws ZeroException {  
  4.         B b = new B();  
  5.         b.run(i);  
  6.     }  
  7. }  
  8. class B {  
  9.     publicvoid run(int i) throws ZeroException {  
  10.         if (i < 0) {  
  11.             thrownew ZeroException("引數不能小於零!");  
  12.         }  
  13.         System.out.println("引數:" + i);  
  14.     }  
  15. }  
  16. class ZeroException extends Exception {  
  17.     privatestaticfinallong serialVersionUID = 1L;  
  18.     private
     String detailMessage;  
  19.     public ZeroException(String detailMessage) {  
  20.         this.detailMessage = detailMessage;  
  21.     }  
  22.     public String getMessage() {  
  23.         return detailMessage;  
  24.     }  
  25. }  
測試: [java] view plain copy  print?
  1. package com.zzj.test.reflect;  
  2. import java.lang.reflect.InvocationTargetException;  
  3. import java.lang.reflect.Method;  
  4. publicclass Test {  
  5.     publicstaticvoid main(String[] args) {  
  6.         try {  
  7.             Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");  
  8.             Method method = clazz.getMethod("run"int.class);  
  9.             method.invoke(clazz.newInstance(), -1);  
  10.         } catch (ClassNotFoundException e) {  
  11.             e.printStackTrace();  
  12.         } catch (SecurityException e) {  
  13.             e.printStackTrace();  
  14.         } catch (NoSuchMethodException e) {  
  15.             e.printStackTrace();  
  16.         } catch (IllegalArgumentException e) {  
  17.             e.printStackTrace();  
  18.         } catch (IllegalAccessException e) {  
  19.             e.printStackTrace();  
  20.         } catch (InvocationTargetException e) {  
  21.             System.out.println("此處接收被呼叫方法內部未被捕獲的異常");  
  22.             e.printStackTrace();  
  23.         } catch (InstantiationException e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.     }  
  27. }  
輸出: [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. import java.lang.reflect.InvocationTargetException;  
  3. import java.lang.reflect.Method;  
  4. publicclass Test {  
  5.     publicstaticvoid main(String[] args) {  
  6.         try {  
  7.             Class<?> clazz = Class.forName("com.zzj.test.reflect.Reflect");  
  8.             Method method = clazz.getMethod("run"int.class);  
  9.             method.invoke(clazz.newInstance(), -1);  
  10.         } catch (ClassNotFoundException e) {  
  11.             e.printStackTrace();  
  12.         } catch (SecurityException e) {  
  13.             e.printStackTrace();  
  14.         } catch (NoSuchMethodException e) {  
  15.             e.printStackTrace();  
  16.         } catch (IllegalArgumentException e) {  
  17.             e.printStackTrace();  
  18.         } catch (IllegalAccessException e) {  
  19.             e.printStackTrace();  
  20.         } catch (InvocationTargetException e) {  
  21.             System.out.println("此處接收被呼叫方法內部未被捕獲的異常");  
  22.             Throwable t = e.getTargetException();// 獲取目標異常
  23.             t.printStackTrace();  
  24.         } catch (InstantiationException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.     }  
  28. }  
輸出: [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)  

相關推薦

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 web springmvc全域性異常處理

通常出現異常的處理方法:dao拋給server、server拋給controller、controller拋給前端控制,前端控制器呼叫全域性異常處理器。 全域性異常處理器處理思路: 解析出異常型別        如果是已知的異常,直接取出異常資訊,在錯誤頁頁面展示  

深入Java虛擬機 類加載機制

method jre 聲明 常量 資源 inittest java開發 啟動 由於 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17881581 類加載過程 類從被加載到虛擬機內存中開始,到卸載出內存

Java開發知識Java異常處理

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

java提高篇(一)-----理解java的三大特性封裝

nss 一般來說 隱藏 source 沒有 實例 十個 影響 角度 轉 CSDN https://blog.csdn.net/chenssy/article/details/12757911?utm_source=blogxgwz0 從大二接觸java開始,到現在也差

java 異常處理宣告丟擲異常

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

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

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

Java 異常處理 例項

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

服務閘道器zuulzuul統一異常處理

過濾器中丟擲異常的問題 首先,我們可以來看看預設情況下,過濾器中丟擲異常Spring Cloud Zuul會發生什麼現象。我們建立一個pre型別的過濾器,並在該過濾器的run方法實現中丟擲一個異常。比如下面的實現,在run方法中呼叫的doSomething方法將丟擲Runt

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.lang.IllegalStateException異常產生的原因及解決辦法

錯誤型別大致為以下幾種: java.lang.IllegalStateException:Cannot forward a response that is already committed IllegalStateExce

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提高篇(四)-----理解java的三大特性多態

優先級 這一 否則 封裝 https 繼續 aid 類方法 void 作者: chenssy 出處: http://www.cnblogs.com/chenssy/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原

Java對象及對象引用變量

棧空間 字符 new 包含 訪問 class 簡單的 構造函數 第一個 Java對象及其引用 關於對象與引用之間的一些基本概念。 初學Java時,在很長一段時間裏,總覺得基本概念很模糊。後來才知道,在許多Java書中,把對象和對象的引用混為一談。可是,如果