1.Class類(lèi)
1) 在面向?qū)ο蟮氖澜缋铮f(wàn)事萬(wàn)物皆對(duì)象。(java語(yǔ)言中,靜態(tài)的成員、普通數(shù)據(jù)類(lèi)型除外)
類(lèi)是不是對(duì)象呢?類(lèi)是(哪個(gè)類(lèi)的對(duì)象呢?)誰(shuí)的對(duì)象呢?
類(lèi)是對(duì)象,類(lèi)是java.lang.Class類(lèi)的實(shí)例對(duì)象
2)這個(gè)對(duì)象到底如何表示
3 )Class.forName("類(lèi)的全稱(chēng)")
不僅表示了,類(lèi)的類(lèi)類(lèi)型,還代表了動(dòng)態(tài)加載類(lèi)
請(qǐng)大家區(qū)分編譯、運(yùn)行
編譯時(shí)刻加載類(lèi)是靜態(tài)加載類(lèi)、運(yùn)行時(shí)刻加載類(lèi)是動(dòng)態(tài)加載類(lèi)
4)基本的數(shù)據(jù)類(lèi)型
void關(guān)鍵字 都存在類(lèi)類(lèi)型
5)Class類(lèi)的基本API操作
2.方法的反射
1)如何獲取某個(gè)方法
方法的名稱(chēng)和方法的參數(shù)列表才能唯一決定某個(gè)方法
2)方法反射的操作
method.invoke(對(duì)象,參數(shù)列表)
3)為什么要用方法的反射
why?指定方法名稱(chēng)調(diào)用方法
舉個(gè)實(shí)際應(yīng)用的案例 ---->通過(guò)標(biāo)準(zhǔn)JavaBean的屬性名獲取其屬性值
BeanUtil類(lèi)
4)通過(guò)Class,Method來(lái)認(rèn)識(shí)泛型的本質(zhì)
public class MethodDemo4 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
ArrayList<String> list1 = new ArrayList<String>();
list1.add("hello");
//list1.add(20);錯(cuò)誤的
Class c1 = list.getClass();
Class c2 = list1.getClass();
System.out.println(c1 == c2);
//反射的操作都是編譯之后的操作
/*
* c1==c2結(jié)果返回true說(shuō)明編譯之后集合的泛型是去泛型化的
* Java中集合的泛型,是防止錯(cuò)誤輸入的,只在編譯階段有效,
* 繞過(guò)編譯就無(wú)效了
* 驗(yàn)證:我們可以通過(guò)方法的反射來(lái)操作,繞過(guò)編譯
*/
try {
Method m = c2.getMethod("add", Object.class);
m.invoke(list1, 20);//繞過(guò)編譯操作就繞過(guò)了泛型
System.out.println(list1.size());
System.out.println(list1);
/*for (String string : list1) {
System.out.println(string);
}*///現(xiàn)在不能這樣遍歷
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。