本文目錄一覽:
- 1、java.lang.reflect.Field 這是幹什麼的?
- 2、為什麼會產生java.lang.reflect.invocationtargetexception
- 3、java.lang中的Class類,與java.lang.reflect包中的construct、method等有什麼聯繫和區別?
java.lang.reflect.Field 這是幹什麼的?
java.lang.reflect包,主要提供了一些「反射」的類。也就是經常會聽到的反射機制常用到的一些類。
java.lang.reflect.Field主要是用於反射類的欄位。
反射經常用於工具類的開發,或中間件的開發。
為什麼會產生java.lang.reflect.invocationtargetexception
InvocationTargetException 是一種包裝由調用方法或構造方法所拋出異常的受查異常。這個異常並不是Eclipse插件開發特有的,而是標準JDK中的,它定義在 java.lang.reflect包下。在進行Java開發的時候很少會接觸到這個異常,不過在進行Eclipse插件開發中則不同,很多API都聲明拋出此類異常,因此必須對此異常進行處理。
例如,我們開發一個方法用來統一處理異常:
private static void handleException(Exception e)
{
MessageDialog.openError(Activator.getDefault().getWorkbench()
.getDisplay().getActiveShell(), “error”, e.getMessage());
e.printStackTrace();
}
我們發現當傳遞來的參數e為InvocationTargetException 的時候彈出的對話框中的消息是空的,查看InvocationTargetException 的源碼得知InvocationTargetException 並沒有覆蓋getMessage方法,所以消息當然是空的了。我們需要調用InvocationTargetException 的getTargetException方法得到要被包裝的異常,這個異常才是真正我們需要的異常。修改代碼如下所示:
private static void handleException(Exception e)
{
String msg = null;
if (e instanceof InvocationTargetException)
{
Throwable targetEx = ((InvocationTargetException) e)
.getTargetException();
if (targetEx != null)
{
msg = targetEx.getMessage();
}
} else
{
msg = e.getMessage();
}
MessageDialog.openError(Activator.getDefault().getWorkbench()
.getDisplay().getActiveShell(), “error”, msg);
e.printStackTrace();
}
java.lang中的Class類,與java.lang.reflect包中的construct、method等有什麼聯繫和區別?
有一些聯繫,談不上區別。他們是獨立的類,各自有自己的功能。
你每定義一個類(產生一個java文件)
系統運行的時候,載入java文件 系統就多了一個類的定義
系統裡面保存類的定義的方式是就是用java.lang.Class
也就是說 任何類都有一個對應的Class對象,
Class clz = String.class ; class靜態欄位就是該類的Class對象。
通過Class對象,可以得到construct,method這些具體的類定義的細節。
類的細節就是構造函數,普通函數,靜態函數,欄位成員等等,就對應了java.lang.reflect下面的那一堆。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/290762.html