基礎知識《八》 Java反射機制

2021-09-08 22:23:54 字數 2645 閱讀 2463

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...