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()); } }