黑馬程序員—高新技術_反射(1)

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------


如何得到各個字節碼對應的實例對象
類名。class,例如,System.class
對象。getClass(),例如,new Data().getClass()
Class.forName("類名"),例如,Class.forName("java.util.Data")


Class有9個預定義的class對象       (8個基本的數據類型和void)
Class c1s1=void.class();

int.class==Integer.TYPE
int[].class.isArray()


反射就是把java類中的各種成分映射成相應的java類


method   代表類中的方法
Constructor類     代表某個類中的一個構造方法   
獲得方法時要用到類型:
Constructor constructor =
Class.forName("java.lang.String").getConstructor(new StringBuffer("abc"));
調用獲得的方法時要用到上面相同類型的實例對象
通常方式:String str=new String(new StringBuffer("abc"));
反射方式:String str=(String)construcotr.newInstance(new StringBuffer("abc"));

類Class也有一個newInstance的方法
當用到的是,不帶參數的構造方法可以直接用類Class的newInstance()方法
String str=(String)Class.forName("java.lang.String").newInstance();

類Field 成員類
類ReflectPoint中的成員x,y
private int x;
public int y;

類ReflectTest中的調用
ReflectPoint pt1=new ReflectPoint(3,5);
Field fieldY=pt1.getClass().getField("y");
System.out.println(fieldY.get(pt1));

getDeclaredField方法爲得到私有成員的方法,可見
fieldX.setAccessible(true);暴力設置可得到該private屬性的值

ReflectPoint pt2=new ReflectPoint(3,5);
Field fieldX=pt2.getClass().getDeclaredField("x");
fieldX.setAccessible(true);
System.out.println(fieldX.get(pt2));

將字符串中所有的字符b,變成字符a
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b','a');
field.set(obj,newValue);












 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章