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