1. 程式人生 > >027.2 反射技術 動態獲取字段和方法

027.2 反射技術 動態獲取字段和方法

println tca 進行 style ssi throws access 反射 row

##############################################
動態獲取字段和暴力訪問

String className = "cn.itcast.domain.Person";
Class clazz = Class.forName(className);

String fieldName = "age";

//獲取age字段對象。
//        Field field = clazz.getField(fieldName);//獲取是公共的字段。
Field field = clazz.getDeclaredField(fieldName);

//        getXXX:獲取都是類中公共的成員。
// getDeclaredXXX:獲取本類中已有的成員。 // System.out.println(field); //對其進行值的設置,必須先有對象。 Object obj = clazz.newInstance(); //通過查找父類AccessiableObject的方法。setAccessiable(true); field.setAccessible(true);//取消權限檢查,暴力訪問。一般不訪問私有。 field.set(obj, 30);//IllegalAccessException:age字段是私有的。 System.out.println(field.get(obj));

##################################################
獲取方法

##Person.java
…
public void show(String name,int age){
    System.out.println("show run...name="+name+",age="+age);
}

public static void staticShow(){
    System.out.println("static show run");
}

...
##
public static void getMethodDemo2() throws
Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); String methodName = "staticShow"; Method method = clazz.getMethod(methodName, null); method.invoke(null, null); } public static void getMethodDemo() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); String methodName = "show"; Method method = clazz.getMethod(methodName, String.class,int.class); Object obj = clazz.newInstance(); method.invoke(obj, "wangcai",20); }

027.2 反射技術 動態獲取字段和方法