一、类的成员变量Fields和属性Properties
Java学习中一直以为成员变量与属性是一样的,但后面使用IDEA等工具时发现有区别,下面创建一个类Person区分一下:
1. 成员变量Fields:就是定义的字段name、age、gender(没有get/set)
private String name;
private int age;
private String gender;
2. 属性Properties:常见properties应该是在xxx.properties作为配置文件,属性Properties是有get/set的,或者说是成员变量的getter/setter,用来设置/获取这个类的属性。
属性properties的官方定义:属性是指get或者set方法名,去掉get或者set后,把剩余的部分首字母改为小写后,即为这个类的属性。
上图中没有height成员变量,但getHeight()是一个getter,因此getHeight()也是属性。
参考文章:
https://blog.csdn.net/peng19870724/article/details/105551255
https://blog.csdn.net/sinat_34137390/article/details/82149259
二、由于成员变量和属性的不同,那么我们应该如何获取类的成员变量和属性?
1、获取某个类的成员变量,不包括父类的字段
Field[] fields = User.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getName());
}
2、获取某个类的属性
PropertyDescriptor[] propertyDescriptors = BeanUtils.getPropertyDescriptors(User.class);
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
System.out.println(propertyDescriptor.getName());
}