/*
*用反射获取类的属性方法,包括private的属性方法
*/
@Test
public void test1() {
Class<Son> sonClass = Son.class;
// Field[] getDeclaredFields()
// 返回的数组 Field对象反映此表示的类或接口声明的所有字段 类对象。
Field[] fields = sonClass.getDeclaredFields();
for (Object obj : fields) {
// private int Test10月.Son.age
// private java.lang.String Test10月.Son.name
System.out.println(obj);
}
System.out.println("******************");
// reflect.Method[] getMethods()
// 返回一个数组包含Method对象反映此表示的类或接口的所有公共方法Class对象,
// 包括那些由类或接口和那些从超类和超接口继承的声明。
Method[] methods = sonClass.getMethods();
for (Object obj : methods) {
// public java.lang.String Test10月.Son.getName()
// public java.lang.String Test10月.Son.toString()
// public void Test10月.Son.setName(java.lang.String)等父类的方法...
System.out.println(obj);
}
System.out.println("***************");
// reflect.Method[] getDeclaredMethods()
// 返回一个数组包含Method对象反射的类或接口通过此表示的所有声明的方法Class对象,
// 包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。
Method[] sonClassDeclaredMethods = sonClass.getDeclaredMethods();
for (Object obj : sonClassDeclaredMethods) {
// private int Test10月.Son.getAge()
// private void Test10月.Son.setAge(int)
// public java.lang.String Test10月.Son.getName()
// public java.lang.String Test10月.Son.toString()
// public void Test10月.Son.setName(java.lang.String)
System.out.println(obj);
}
}
}
class Son {
private int age;
private String name;
@Override
public String toString() {
return "Son{" + "age=" + age + ", name='" + name + '\'' + '}';
}
private int getAge() {
return age;
}
private void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Son() {}
}
Java基础 -> 使用反射获取类中的属性和方法(包括私有的)
于 2020-10-03 14:53:17 首次发布