zoukankan      html  css  js  c++  java
  • 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》一个随笔记录,与君共勉;

  • 相关阅读:
    DES 加密算法
    socket编程之bind()函数
    如何启动ubuntu下的telnet服务
    基于duilib修改的版本上传了
    mmsPlayer, for android ,wince,windows,wm等
    [转]log4c 配置文件的用法
    mmsPlayer, for android ,wince,windows,wm等
    wince 版本的播放器 是基于 TC89系列
    cocos2dx做的一个圣诞节软件
    基于duilib修改的版本上传了
  • 原文地址:https://www.cnblogs.com/yantt/p/12916003.html
Copyright © 2011-2022 走看看