15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的①属性结构
Person等代码见“15-5 反射 ---- 获取运行时类的完整结构(1)概述”
代码:
package java3;
import java2.Person;
import org.junit.Test;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
//获得当前运行时类的属性结构
public class FieldTest {
@Test
public void test1() {
Class clazz = Person.class;
//获取属性结构
//方式一:getFields():获取当前运行时类及其父类中声明为public访问权限的属性
Field[] fields = clazz.getFields();
for (Field f : fields) {
System.out.println(f);
}
System.out.println("***************************");
//方式二:getDeclaredFields():获取当前运行时类中生命的所有属性。(不包含父类中的属性)
Field[] declaredFields = clazz.getDeclaredFields();
for (Field f : declaredFields) {
System.out.println(f);
}
}
//权限修饰符 数据类型 变量名 =
@Test
public void test2() {
Class clazz = Person.class;
Field[] declaredFields = clazz.getDeclaredFields();
for (Field f : declaredFields) {
//1.权限修饰符
int modifier = f.getModifiers();
System.out.print(Modifier.toString(modifier) + "\t");
//2.数据类型
Class type = f.getType();
System.out.print(type.getName() + "\t");
//3.变量名
String fName = f.getName();
System.out.println(fName);
}
}
}
test1输出:
public int java2.Person.id
public double java2.Creature.weight
***************************
private java.lang.String java2.Person.name
int java2.Person.age
public int java2.Person.id
test2输出:
private java.lang.String name
int age
public int id