getFields():得到某个类的全部的公共(public)的字段,包括父类中的字段。html
getDeclaredFields():得到某个类的全部声明的字段,即包括public、private和proteced,可是不包括父类的申明字段。java
一样相似的还有getConstructors()和getDeclaredConstructors()、getMethods()和getDeclaredMethods(),这二者分别表示获取某个类的方法、构造函数。数组
那么问题来了,我要获取到当前类以及父类的全部属性,怎么办?函数
/** * 获取本类及其父类的属性的方法 * @param clazz 当前类对象 * @return 字段数组 */ private static Field[] getAllFields(Class<?> clazz) { List<Field> fieldList = new ArrayList<>(); while (clazz != null){ fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); clazz = clazz.getSuperclass(); } Field[] fields = new Field[fieldList.size()]; return fieldList.toArray(fields); }
测试:测试
public static void main(String[] args) { Student student = new Student(); student.setStuClass("18001"); student.setStuNum("19800101"); student.setName("Tom"); student.setAge("20"); Class<? extends Student> clazz = student.getClass(); Field[] fields = getAllFields(clazz); for (Field field : fields) { System.out.println(field.getName()); } }