class.getFields和class.getDeclareFields的区别
class.getFields的定义
- 返回类提供的public域包括超类的共有变量;
注: 是public,我们平时定义变量一般用的private,如果用getFields是不会获得.
class.getDeclareFields的定义
- 返回类中声明的全部域,其中包括私有和受保护的成员,但是不包括父类的成员.
注: 与getFields不同的就是getDeclareFields能返回声明中所有定义的成员变量,不管你是私有还是保护的,但是仅限于当前类中的不包括父类的成员.
代码演示
1.定义一个Account类
public class Account {
private String address;
}
2.定义一个User类继承了Account类
public class User extends Account{
private String name;
private String sex;
}
3.测试类
public class Test {
public static void main(String[] args) {
Class clazz = User.class;
Field[] fields = clazz.getFields();
for (Field field : fields){
System.out.println("getFields: " + field.getName());
}
System.out.println("=====================");
fields = clazz.getDeclaredFields();
for (Field field : fields){
System.out.println("getDeclaredFields: " + field.getName());
}
}
}
4.结果
=====================
getDeclaredFields: name
getDeclaredFields: sex
5.改变Account中address的属性为public并打印
getFields: address
=====================
getDeclaredFields: name
getDeclaredFields: sex
6.改变User中name的属性为public并打印
getFields: name
getFields: address
=====================
getDeclaredFields: name
getDeclaredFields: sex
7.综上基本可以验证定义
- 如果你想获得一个类的所有成员,需要使用getDeclareFields;
- 如果你只想获得一个类的所有公有成员,可以使用getFields;但是其中还包括父类的公有成员;那小朋友可能要问了,如果我只想获得当前类的公有成员应该怎么做呢?
- 我觉得可以用getDeclareFields与getFields取交集即可取出当前类的公有成员;
本篇只是看《Java核心技术卷1》一个随笔记录,与君共勉;
学习如逆水行舟,不进则退。