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