class類的使用
方法的反射
成員變量的反射
構(gòu)造函數(shù)的反射
Java類加載機(jī)制
反射幫我們做一些程序運(yùn)行時(shí)刻的事情。
靜態(tài)的成員,普通數(shù)據(jù)類型不是對(duì)象。
類是class的對(duì)象。
屬性名稱規(guī)范:如果第一個(gè)首字母是大寫,則第二個(gè)字母也應(yīng)該是大寫,如果是第一個(gè)字母是小寫則沒有問(wèn)題(如果不按規(guī)范來(lái),用到Java反射的時(shí)候可能會(huì)找不到對(duì)應(yīng)的set/get方法)
萬(wàn)物皆對(duì)象,一個(gè)類可以實(shí)例化一個(gè)對(duì)象,一個(gè)類也是Class的一個(gè)對(duì)象,c為Person的類類型(class type),表示Person是一個(gè)對(duì)象,Class的對(duì)象,任何一個(gè)類都是Class的實(shí)例對(duì)象,有三種表示方式,如下所示:
//事例告訴我們?nèi)魏我粋€(gè)類都有一個(gè)靜態(tài)成員屬性
Class c= Person.class
1.所有類的對(duì)象都是class的實(shí)例。
獲取class對(duì)象的三種方法
《1》 Class person = Class.forName("Person");//常用方法
《2》
?
Class
?
person = new Person.getClass();
《3》
?
Class?
person = Person.class
一個(gè)類只可能是Class類的一個(gè)實(shí)例對(duì)象。 以上person是相同的。
可以通過(guò)類的類類型創(chuàng)建類的對(duì)象實(shí)例。(動(dòng)態(tài)加載一個(gè)類,編譯時(shí)刻加載類是靜態(tài)加載類,運(yùn)行時(shí)刻加載類是動(dòng)態(tài)加載類)
Person person = (Person)person.newInstance(); //必須要有無(wú)參的構(gòu)造方法
類是class的一個(gè)實(shí)例,基本的數(shù)據(jù)類型也是(int,String,void)
//new 創(chuàng)建對(duì)象是靜態(tài)加載類,在編譯時(shí)刻就需要加載所有的可能使用到的類。
c1.getName();
person.
getFields()//可以獲得自己和父類的一些public方法
Person person = (Person)person.newInstance(); //必須要有無(wú)參的構(gòu)造方法
Method類,方法的對(duì)象,一個(gè)成員方法就是一個(gè)Method對(duì)象,getMethods()方法獲取的是所有public的函數(shù),包括父類的,getDeckaredMethods()獲取的是自己聲明的,不問(wèn)訪問(wèn)類型。
2 通過(guò)class獲取對(duì)象
取得其他類中的父類
?
demo=Class.forName(
"包名.Person"
);
?demo.getSuperClass();