1. 程式人生 > >黑馬程式設計師_java高新技術(3)反射

黑馬程式設計師_java高新技術(3)反射



反射就是JAVA類中各種成分對映成各種類
class.forName(“”)括號裡面填入類的具體路徑




反射的例項
public class ReflectTest{


    public static void main(String[] args)
   {
    String str1=“abc”;
   Class cls1=str1.getClass();
   Class cls2=String.class;
   Class cls3=Class.forNmae("java.lang.String")
   //他們三個都是同一份位元組碼,都是對應String,然後才能new出各種例項
   sop(cls1.isPrimitive())//是否是基本型別的位元組碼
  sop(int.class.isPrimitive())
  sop(int.class==Integer.class) //false
  sop(int.class==Integer.TYPE)//表示所包裝型別的基本位元組碼
  sop(int[].class.isPrimitive)//fasle不是基本型別
  陣列型別的class例項物件
  方法 int[].class.isArray()
   總之只要是在原程式中出現的型別都有各自的Class例項物件  例如void.class
}
}




REflectPoin pt1=new ReflectionPoint(3,5);
Field fieldY=pt1.getClass().getField("y");//獲得成員變數
fieldY.get(pt1)//在pt1物件上的y的值
fieldX.setAccessible(true)//讓私有的值也可以nadao




得到所有欄位
Field f[]=c1.getDeclaredFields()//
遍歷出來
for(Field field:f)
{
     if(field.getType==String.class//若果型別是String的,同一份位元組碼用==){
     {
      從欄位中取出值
   String v=(String)field.get(c1);
   String nv=v.replace('b','a')
   field.set(obj,nv);
  }
}


成員方法的反射
方法與物件沒關係,可以用類去呼叫
用反射的方式呼叫方法
Method MethodCharAt=Strin.class.getMethod(“charAt”,int.class)//引數是int
MethodCharAt.invoke(str1,args)//在物件上去呼叫方法  args是方法的引數
MethodCharAt.invoke(null,args)用來呼叫靜態方法


JDK1.4方法
MethodCharAt.invoke(null,object[]{2})傳一個兩個數型別的陣列






}