码迷,mamicode.com
首页 > 其他好文 > 详细

class.getFields和class.getDeclareFields的区别

时间:2020-05-19 12:25:45      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:的区别   system   小朋友   out   笔记   red   成员   add   回声   

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》一个随笔记录,与君共勉;

class.getFields和class.getDeclareFields的区别

标签:的区别   system   小朋友   out   笔记   red   成员   add   回声   

原文地址:https://www.cnblogs.com/yantt/p/12916003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!