黑馬程式設計師_java高新技術(3)反射
阿新 • • 發佈:2019-02-10
反射就是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})傳一個兩個數型別的陣列
}