1.反射可以做什麼
2.反射相關的api
3.獲取class執行時類的例項的三種方法:
1)通過執行時類本身的.class屬性*****
class clazz= person.class;
2)通過執行時類的物件獲取
person p=new person;
class clazz=p.getclass();
3)通過class的靜態方法獲取,//通過此方式,體現反射的動態性。來什麼字串類,就造什麼類******
string classname="com.cmge.org.person";
class clazz=class.forname(classname);
4)通過類載入器
string classname="com.cmge.org.person";
classloader loader=this.getclass.getclassloader();
class clazz=loader.loadclass(classname);
system.out.printin(clazz.getname());
4.建立執行時類的例項,並獲取類的相關結構
方法一://建立執行時類的例項,使用newinstance(),實際上呼叫了類的無參構造器。因此要想執行時類的例項建立成功,必須要有無參構造器,並且無參構造器的訪問許可權是公開的
string classname="com.cmge.org.person";
class clazz=class.forname(classname);
object object=clazz.newinstance();
person p=(person)object;
5、通過反射獲取類的完整結構
1)獲取執行時類的屬性(getfields()獲取公開屬性、getdeclaredfileds()獲取執行時類申明的全部屬性),
獲取屬性的修飾符、變數型別、變數名。
2)獲取執行時類的方法
獲取執行時類的方法(getmethods()獲取公開的方法、getdeclaredmethods()獲取全部方法)
class clazz=person.class;
method m1=clazz.getmethods();
method m2=clazz.getdeclaredmethods();
獲取方法的注釋、方法修飾符、方法返回值型別、方法變數名、方法引數列表、方法異常
for(method m in m2){
annotation anns=m.getannotations();//獲取方法注釋
string str=modifier.tostring(m.getmodifiers());//獲取方法修飾符
class typeclass=m.getreturntype();//獲取返回值型別
class params=m.getparametertypes();//獲取引數列表
class exps=m.getexceptiontypes();
3)獲取執行時類的構造器及其他
class clazz=person.class;
constructor c=clazz.getdeclaredconstructor();//獲取構造器
//獲取執行時類的父類、
//獲取父類的泛型、
class inte***ces=clazz.getinte***ces();//獲取實現的介面、
packge p=clazz.getpackge();//獲取所在的包
annotation anns=clazz.getannotations();//獲取類的註解
6、呼叫執行時類的指定的屬性,
指定的方法
1)呼叫指定的屬性
class clazz=person.class;
field name=clazz.getfield("name");
person p=(person) clazz.newinstance();
name.set(p,"jerry");//設定指定的屬性值
2)呼叫指定的方法
class clazz=person.class;
method m=clazz.getmethod("show");
person p=(person)clazz.newinstance();
object obj=m.invoke(p);//呼叫指定的方法
method m2=clazz.getmethod("info");//其中info是靜態的方法
m2.invoke(person.class);//呼叫靜態的方法
method m3=clazz.getmethod("display",string.class,integer.class);//呼叫有兩個引數的方法
object obj2=m3.invoke(p,"usa",10);
3)呼叫指定的構造器
7、動態**與aop
******重要,需要重複學習
Java基礎知識 八
24.執行緒的應用 1.等待之後超時 while 結果未返回 時間未到 wait 2.執行緒池 要有佇列,狀態 worker實現runnable介面,迴圈從jobs佇列取任務執行,獲取不到就wait execute job job 時,喚醒jobs 3.基於執行緒池web伺服器 思路 開乙個sock...
JAVA反射基礎知識整理
2.1 class類 獲取class物件的三種方式 方式一 通過object類中的getobject 方法 person p new person class c p.getclass 方式二 通過 類名.class 獲取到位元組碼檔案物件 任意資料型別都具備乙個class靜態屬性,看上去要比第一種...
反射 基礎知識
一 型別 type 物件是什麼 比如 object x x是物件,object就是它的型別,在程式中如何描述型別這個概念呢?就是type system.type 要獲取某個類的型別可以用typeof 操作符 object a object b datatable t type atype typeo...