1.實體類java
public class Dog { private String color; public boolean hasTail; public boolean isHasTail() { return hasTail; } public void setHasTail(boolean hasTail) { this.hasTail = hasTail; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } @Override public String toString() { return "Dog{" + "color='" + color + '\'' + '}'; } }
2.經過java反射機制獲取類的屬性的值ide
@Test public void test1(){ Dog dog = new Dog(); dog.setColor("白"); Class clazz = dog.getClass(); try { Field color = clazz.getDeclaredField("color"); //設置即便該屬性是private,也能夠進行訪問(默認是false) color.setAccessible(true); String c = color.get(dog).toString(); System.out.println(dog); }catch (Exception e){ e.printStackTrace(); } }
運行結果:測試
3.經過java反射機制設置類的屬性this
@Test public void test2(){ Dog dog = new Dog(); Class clazz = dog.getClass(); try{ Field color = clazz.getDeclaredField("color"); color.setAccessible(true); color.set(dog,"黑"); System.out.println(dog); }catch (Exception e){ e.printStackTrace(); } }
運行結果:spa
4.getField方法和getDeclaredField方法二者區別(getFields和getDeclaredFields同理)code
getField:只能獲取類和其父類的public屬性blog
getDeclaredField:該方法只能夠獲取類自己的屬性(private public protected default),但不包括父類繼承
實體類BigDog.java繼承於Dog.javaget
public class BigDog extends Dog { private Integer age; public String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "BigDog{" + "age=" + age + '}'; } }
測試getFields方法:io
@Test public void test(){ BigDog dog = new BigDog(); Class dogClass = dog.getClass(); //只能獲取類及其父類的公有屬性 Field[] fields = dogClass.getFields(); for (Field field : fields) { System.out.println(field); } }
運行截圖:
測試getDeclaredFields方法:
@Test public void test3(){ BigDog dog = new BigDog(); Class dogClass = dog.getClass(); //能獲取該類中全部的屬性,可是不能獲取父類的屬性 Field[] fields = dogClass.getDeclaredFields(); for (Field field : fields) { System.out.println(field); } }
運行截圖: