一、获取属性结构
1、getFields()
getFields():获取当前运行时类及其父类中声明为public访问权限的属性
Demo:
1 @Test
2 public void test1() {
3
4 Class clazz = Person.class;
5
6 //获取属性结构
7 //getFields():获取当前运行时类及其父类中声明为public访问权限的属性
8 Field[] fields = clazz.getFields();
9 for (Field f : fields) {
10 System.out.println(f);
11 }
12 }
运行结果:
2、getDeclaredFields()
getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)
Demo:
1 @Test
2 public void test2() {
3
4 Class clazz = Person.class;
5
6 //获取属性结构
7 //getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)
8 Field[] declaredFields = clazz.getDeclaredFields();
9 for(Field f : declaredFields){
10 System.out.println(f);
11 }
12 }
运行结果:
3、getField(String name)
getField(String name):根据字段名来获取运行时类中 public 修饰的成员变量
Demo:
1 @Test
2 public void test3() throws NoSuchFieldException {
3
4 Class clazz = Person.class;
5
6 //获取属性结构
7 //getField():根据字段名来获取当前运行时类中 public 修饰的成员变量
8 Field field = clazz.getField("id");
9 System.out.println(field);
10 }
4、getDeclaredField(String name)
getDeclaredField(String name):根据字段名来获取当前运行时类中的成员变量,忽略修饰符;
Demo:
1 @Test
2 public void test4() throws NoSuchFieldException {
3
4 Class clazz = Person.class;
5
6 //获取属性结构
7 //getField():根据字段名来获取获取当前运行时类中 public 修饰的成员变量
8 Field field = clazz.getDeclaredField("name");
9 System.out.println(field);
10 }
二、获取成员变量的信息
一个类中的成员变量可以有修饰符,数据类型和变量名等信息。这些都可以获取:
常用方法:
public int getModifiers() 以整数形式返回此Field的修饰符
public Class<?> getType() 得到Field的属性类型
public String getName() 返回Field的名称。
Demo:
1 @Test
2 public void test1(){
3 Class clazz = Person.class;
4 Field[] declaredFields = clazz.getDeclaredFields();
5 for(Field f : declaredFields){
6 //1.权限修饰符
7 int modifier = f.getModifiers();
8 System.out.print(Modifier.toString(modifier) + "\t");
9
10 //2.数据类型
11 Class type = f.getType();
12 System.out.print(type.getName() + "\t");
13
14 //3.变量名
15 String fName = f.getName();
16 System.out.print(fName);
17
18 System.out.println();
19 }
20 }
运行结果:
(1)修饰符
获取的修饰符返回值是一个 int,而不是期望的字符串,这是因为在 Modifier 类中声明了对应的常量值。
调用 Modifier 类的 toString() 方法就可以获取对应值的修饰符。
(2)数据类型
调用属性的 getType() 就可以获取数据类型,而它也是一个 Class 对象。
三、