反射:框架設計靈魂
框架:半成品軟件,可以在框架基礎上進行軟件開發,簡化編碼
反射:將類的各個組成部分封裝我其他對象,這就是反射機制
好處:
1.可以在程序運行過程中,操作這些對象
2.可以解耦,提高程序的可擴展性
獲取Class對象的方式:
1.Class.forName(“全類名”);將字節碼文件加載進內存,返回Class對象 (多用於配置文件將類名定義在配置文件中,讀取文件加載類)
2.類名.Class;通過類名的屬性.class獲取(多用於參數傳遞)
3.對象.getClass();getClass()方法在Object類中定義着( 多用於對象的獲取字節碼的一個方式)
結論:
同一個字節碼文件(*.class)在程序巡行的過程中,只會被加載一次,不論通過那一種方式獲取Class對象都是同一個。
Class對象的功能:
獲取功能:
1.獲取成員變量們:
Field[]getFields() :獲取所有public修飾的成員變量
Field
getField(
String name) :
獲取指定名稱的 public修飾的成員變量
FieId[ ] getDeclaredFieIds()獲取所有成員變量,不考慮修飾符
FileId getDeclaredFieId(String name);
2.獲取構造方法們:
Constructor<?>[ ] getConstructors()
Constructor<T> getConstructor(類<?>… parameterTypes)
Constructor<T> getDeclaredConstructor(類<?>… parameterTypes)
Constructor<?>[ ] getDeclaredConstructors();
3.獲取成員方法們
Method[ ] getMethod()
Method getMethod(String name,類<?>… parameterType)
Method[ ] getDeclaredMethod()
Method getDeclaredMethod(String name,類<?>… parameterType)
4.獲取類名
String getNmae();
Field:成員變量
操作:
1.設置值
void set(Object obj,Object value);
2.獲取值
get(Object obj)
3.忽略訪問權限修飾符的安全檢查
setAccessible(true):暴力反射
Constructor:構造方法
創建對象:
newInstance(Object… initargs)
如果使用空參數構造方法創建對象,操作可以簡化Class對象的newInstance方法