在上一節段中我們從整體上描述了反射,深入了解了class類,有了class物件 我們能做什麼個 ,本章節做深入的探索和學習:
概述:我們建立執行時類的物件 呼叫的是:
person person = clazz.newinstance();
建立對應的執行時類物件,使用newinstance(),實際上就是呼叫了執行時類的空參的構造器,當然你要呼叫空參的構造器執行類就要有乙個空參的構造器,且許可權足夠;
person person = new person(); 也是呼叫執行時類的空參的構造器;
第一part: 通過反射呼叫類的完整結構
獲取屬性:
@test
public void test() throws instantiationexception, illegalacces***ception
// 能獲取執行時類中本身宣告的所有屬性
field fieldarry01 = clazz.getdeclaredfields();
for (field field01 : fieldarry01)
}
獲取方法:
@test
public void test01()
// 獲取執行時類中的宣告的所有方法
method methods00 = clazz.getdeclaredmethods();
for (method method : methods00)
// 獲取修飾符
string str = modifier.tostring(method.getmodifiers());
system.out.println(str);
// 獲取返回值型別
class returntype = method.getreturntype();
system.out.println(returntype.getname() + " ");
// 獲取方法名
system.out.print(method.getname() + " ");
// 獲取形參列表
system.out.print("(");
class params = method.getparametertypes();
for (class p : params)
system.out.println(")");
// 獲取異常型別
class exces = method.getexceptiontypes();
if (0 != exces.length)
for (class exce : exces)
system.out.println();
} }
獲取執行時類中的其他結構
@test
public void test03() throws classnotfoundexception }
@test
public void test04()
@test
public void test05()
@test
public void test06()
@test
public void test07() }
@test
public void test08()
@test
public void test09()
}
第二part
通過反射呼叫類中的指定方法指定屬性以及構造方法
// 設定指定類中的屬性
@test
public void test10() throws exception
// 呼叫指定類中的方法並呼叫
@test
public void test11() throws exception
// 呼叫指定的構造器
@test
public void test12() throws exception
JAVA的反射總結
1.class.forname總結 1.1 原始型別採用class clazz class.forname i getcomponenttype 1.2 類陣列情況採用 lfullclassname 1.3 類情況採用fullclassname 2.class的關鍵函式總結 2.1.1 class....
Java 反射用法總結
簡單的來說,就是在程式執行時,獲取類所有屬性和方法資訊 還可以動態建立乙個物件,並且呼叫它的任意乙個方法 訪問和修改任意乙個屬性,包括private修飾的方法和屬性。獲得class物件的三種方法 child child new child class yclass child.getclass cl...
java泛型反射總結
在需求中,資料庫有兩張表user,admin。我們要查詢裡面的id,name等資訊通常都是寫兩個dao,然後分別給每個查詢欄位寫一套方法。然而其實查詢這些欄位的方法都大同小異,所以產生了乙個更好的解決辦法,就是寫乙個通用的dao,然後把相同的方法寫在通用的dao genericdao 裡,然後然實體...