java 反射field_Java基础--反射之Field
一、Field
(1)Field
/**
* Field: 分裝了字段的信息
* 1. 獲取字段
* 1.1 Field[] fields = clazz.getDeclaredFields();
* 1.2 Field field = clazz.getDeclaredField("name");
*
* 2. 獲取指定對象的指定字段的值
* public Object get(Object obj)
* obj 為字段所在對象
* 3. 設(shè)置指定對象的指定字段的值
* public void set(Object obj, Object value)
* obj 字段所在對象
* value 要設(shè)置的值
*/
@Test
public void test10() throws Exception {
Class clazz = Class.forName("com.wang.reflection.Person");
//1.獲取字段
//1.1 獲取Field的數(shù)組
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields) {
System.out.println("1.1 " + field);
}
//1.2 獲取指定名字的Field
Field field = clazz.getDeclaredField("name");
System.out.println("1.2 " + field.getName());
//2.獲取指定對象的Field的值
Person person = new Person("AAA", 22);
Object val = field.get(person);
System.out.println("2 " + val);
//3. 設(shè)置指定對象的Field值
field.set(person, "BBB");
System.out.println("3 " + person.getName());
//4. 若該字段是私有的,需要調(diào)用
Field field2 = clazz.getDeclaredField("age");
field2.setAccessible(true);
System.out.println("4 " + field2.get(person));
}
結(jié)果輸出:
(2)為私有屬性賦值
@Test
public void test11() throws Exception {
String className = "com.wang.reflection.Student";
String fieldName = "age";
Object val = 20;
//創(chuàng)建className所對應(yīng)的對象,并為其fieldName賦值為val
Object obj = null;
Class clazz = Class.forName(className);
Field field = null;
for(Class clazz2 = clazz; clazz2 != Object.class; clazz2 = clazz2.getSuperclass()) {
try {
field = clazz2.getDeclaredField(fieldName);
} catch (Exception e) {}
}
obj = clazz.newInstance();
field.setAccessible(true);
field.set(obj, val);
Student stu = (Student)obj;
System.out.println(stu.getAge());
}
二、Constructor
/**
* Constructor: 構(gòu)造器
*/
@Test
public void test12() throws Exception {
String className = "com.wang.reflection.Person";
Class clazz = Class.forName(className);
//1. 獲取構(gòu)造器對象
//1.1 獲取所有構(gòu)造器
Constructor [] constructors =
(Constructor[]) Class.forName(className).getConstructors();
for(Constructor cons : constructors) {
System.out.println("1.1 " + cons);
}
//1.2 獲取指定的構(gòu)造器
Constructor constructor = clazz.getConstructor(String.class,Integer.class);
System.out.println("1.2 " + constructor);
//2. 調(diào)用構(gòu)造器的newInstance方法創(chuàng)建對象
Object obj = constructor.newInstance("AAA", 18);
}
輸出:
總結(jié)
以上是生活随笔為你收集整理的java 反射field_Java基础--反射之Field的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java常见的算法_Java常用算法总结
- 下一篇: python中序列和列表区别细菌真菌病毒