Field提供兩組方法操作字段:
xxx getXxx(Object obj):獲取obj對象該Field的字段值,此處的xxx表示8個基本數據類型。若該字段的類型是引用數據類型則使用,Object get(Object obj);
void setXxx(Object obj,xxx val):將obj對象的該Field字段設置成val值,此處的xxx表示8個基本數據類型。若該字段的類型是引用數據類型則使用,void set(Object obj, Object value);
package junereflect624;
//獲取字符,並且賦值,然后再取出來(對應的去查看api,比如這個是Field,別的比如Constructor,Method)
步驟:
1.獲取類
2.獲取字段
3.賦值(set(c.newInstance(),””));{如果為私有的話設置可接受}
import java.lang.reflect.Field;
class Cat{
private String name;
public int age;
private String color;
}
public class FieldDemo12 {
public static void main(String[] args) throws Exception {
Class<Cat> clz = Cat.class;
Field[] f = clz.getDeclaredFields();
for (Field field : f) {
System.out.println(field);
}
Field fi = clz.getDeclaredField("name");
System.out.println(fi);
System.out.println(fi.getName());//name
//核心開始
/**
* void set(Object obj, Object value)
將指定對象變量上此 Field 對象表示的字段設置為指定的新值。
*/
Cat c = clz.newInstance();
fi.setAccessible(true);
fi.set(c, "劉昭");//賦值成功
Object o = fi.get(c);
System.out.println(o);//取出成功
fi = clz.getDeclaredField("age");
fi.setAccessible(true);
fi.set(c, 21);
int i = fi.getInt(c);//左邊的接受類型已經寫成了int,右邊的返回類型就也必須是int
System.out.println(i);//獲取成功
}
}
打印
private java.lang.String junereflect624.Cat.name
public int junereflect624.Cat.age
private java.lang.String junereflect624.Cat.color
private java.lang.String junereflect624.Cat.name
name
劉昭
21