跨境網(wǎng)絡(luò)專線多少錢一年網(wǎng)站seo方案案例
Reflect在文檔中的位置:
文檔鏈接:https://docs.oracle.com/javase/8/docs/api/index.html
用于獲取類或?qū)ο蟮姆瓷湫畔ⅰ?/p>
常用的反射機(jī)制重要的類:
java.lang.Class:整個(gè)字節(jié)碼,代表一個(gè)類型。包含了以下三塊內(nèi)容;
java.lang.reflect.Nethod:method的字節(jié)碼;
java.lang.reflect.Constructor:構(gòu)造方法的字節(jié)碼;
java.lang.reflect.Field:屬性相關(guān)的字節(jié)碼。注意與local_variable
的區(qū)分。
- 作用:
可以通過反射機(jī)制,實(shí)現(xiàn)OCP開閉原則,即對擴(kuò)展開發(fā),對修改關(guān)閉??蚣苤谐S?#xff0c;讓程序更加靈活 - 獲取Class的三種方法
靜態(tài)方法:
forName()的執(zhí)行,會(huì)加載該類。即該類的靜態(tài)代碼塊會(huì)執(zhí)行一次。
比如,獲取String的字節(jié)碼(異常處理,ClassNotFoundException):
Class strCls = Class.forName("java.lang.String");
另外兩種獲取Class的方法:
// 通過實(shí)例方法getClass()獲取(getClass是Object的方法)
Class strCls = "abc".getClass();
// 通過靜態(tài)熟悉獲取
Class strCls = String.class;
Class intCls = int.class;
Class dateCls = Date.class;
Class doubleCls = double.class;
// ...
Class常用方法:
methods | describe |
---|---|
newInstance | 創(chuàng)建一個(gè)該類型的實(shí)例對象(Creates a new instance of the class represented by this Class object.) |
getFields | 獲取該類中所有public的屬性 |
getDeclaredFields | 獲取該類中所有的屬性 |
getDeclaredMethods | 獲取類的方法:實(shí)例方法、靜態(tài)方法等 |
getDeclaredMethod | 獲取類的指定方法 |
getDeclaredConstructors | 獲取構(gòu)造方法 |
getDeclaredConstructor | 獲取指定參數(shù)的構(gòu)造方法 |
Field常用方法:
methods | describe |
---|---|
getModifiers | 獲取當(dāng)前屬性的修飾符類型的int值 |
getType | 獲取當(dāng)前屬性的類型 |
getName | 獲取當(dāng)前屬性的key |
set(obj, attrStr) | 設(shè)置當(dāng)前類實(shí)例屬性的值。eg,obj為當(dāng)前類的實(shí)例對象 |
get(obj) | 獲取當(dāng)前類實(shí)例屬性的值 |
Modifier常用方法:
methods | describe |
---|---|
toString | 把修飾符類型的int值轉(zhuǎn)換為字符串。default-0、public-1、private-2、protected-4、static-8、final-16 |
Method常用方法:
methods | describe |
---|---|
invoke(obj, args) | 執(zhí)行當(dāng)前的方法,返回值等同于被反射的調(diào)用方法的返回值 |
invoke在被調(diào)用時(shí),要注意剩余參數(shù)的匹配。paramterType[] -> new Type[] {xxx, yyy}
Constructor常用方法:
methods | describe |
---|---|
newInstance(Object… params) | 執(zhí)行指定的構(gòu)造方法,創(chuàng)建對象 |
- 注解Annotation
一種引用類型,和普通的類相似,也是生成xxx.class文件,并且可以互相引用。比如注解也可以作用于注解上。一般用于校驗(yàn)等,具體用法待后續(xù)補(bǔ)充
元注解:Target、Retention
Target:注解作用于那些類型上
Retention:注解作用在那個(gè)階段上。源碼、Class、Class + 反射機(jī)制發(fā)現(xiàn)
JDK內(nèi)置注解:
Deprecated:表示當(dāng)時(shí)被注解的目標(biāo)已過時(shí)
Override: 只能用在方法上,編譯階段,和運(yùn)行階段無關(guān). 重寫父類的方法。標(biāo)識(shí)性注解