Java反射中的getFields()和getDeclaredFields()的区别。
先是随便定义了一个对象。
public class User implements Serializable {
private String name;
private String password;
private int age;
public User(String name, String password, int age) {
this.name = name;
this.password = password;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
没有注意,先是用的getFileds() ,进行打印。
User u=new User("hello","222",23);
Class c=u.getClass();
Field[] f= c.getFields();
Field[] f= c.getFields();
Log.i(TAG,"ff----"+f[0]);
结果数组角标越界,查询资料才知道,getFields() 是访问的所有的public修饰的字段,包括从父类集成的public的字段,私有的字段是无法访问的,因为我定义的3个字段全是private所有没有获取到。而getDeclaredFields()是可以访问本类的所有的字段,不管是public protected private 。但是无法访问,父类继承的字段。