反射:顧名思義,就是能從影子看到他的本尊(類和方法的取名通常都有特定的含義) 反編譯就是運用反射實現的 自定義或者自描述的
反射的內部實現
Person ->Class
public class Class
{
Field:描述屬性
Method:描述方法
Constructor:描述構造器
}
與反射有關4個類:Class(獲取實例,字段,方法) Field(與字段相關的操作)
Method(與方法相關的操作) Constructor(與構造函數相關的操作)
反射的3個作用:
1.修改內存中的對象屬性(private)
2.直接調用對象的方法(非常規的)
3.創建對象的實例
利用反射獲取實例的3個方法:
1.Class.forName("類的完整名稱") 必須進行顯式的異常處理
返回與此類相關聯的Class對象
利用此反射方法獲取對象實例可實現通過XML文檔對實例的進行配置
<person class="test.Person"></person>
Person p1=Class.forName("test.Person").newInstance();
2.Person p=new Person();
p1.getClass();//獲得一個與Person類相關聯的Class對象,利用此方法可以創建與先前對象一樣類型的對象
Person p2=p1.getClass().newInstance();
3.Person.class 這就是一個與Person有關的Class對象 Class<Person>
Person.class.newInstance();