Java反射----获取属性、获取方法

本文详细介绍了Java反射中如何获取属性和方法,包括使用getField()、getDeclaredField()等方法获取属性,getMethod()、getDeclaredMethod()等获取方法。同时,讲解了Field和Method对象的相关操作,如setAccessible(true)以访问私有成员,以及Modifier工具类解析修饰符的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取属性

  • getField(fieldName)
    根据字段名获取某个public的field(包括父类)
  • getDeclaredField(fieldName)
    根据字段名获取当前类的某个field(不包括父类)
  • getFields()
    获取所有 public 的 field属性
  • getDeclaredFields()
    获取当前类的所有field (不包含父类)

Field 常见的方法

  1. getName() : 获取属性名
  2. getType() : 获取属性类型
  3. getModifiers() : 返回修饰符、int 类型
  4. set(obj , val) : 设置 属性值
  5. get(obj) : 获取属性值
  6. setAccessible(true) : 允许访问私有属性

Modifier 处理getModifiers() 返回值

isPublic(int)
isPrivate(int)
isProtected(int)
isStatic(int)
isFinal(int)

// 通过反射,获取类中的属性
        Class<Goods> clz = Goods.class ;

        // 获取 类中所有声明的属性
        Field[] declaredFields =  clz.getDeclaredFields();

        // 构建一个 Goods 对象
        Goods goods = clz.getDeclaredConstructor().newInstance();
        goods.setGoodsName("笔记本");
        goods.setGoodsPrice(new BigDecimal("500"));


        for(Field field : declaredFields) {

            // 破坏 封装,允许封装没有权限的 属性
            //field.setAccessible(true);

            // 获取 属性名
            System.out.println(field.getName());
            // 获取 属性的 修饰符
            System.out.println(field.getModifiers());

            //System.out.println(Modifier.isPrivate(field.getModifiers()));
            //System.out.println(field.getType());


//            // 修改属性值, 将 录入时间设置为 当前系统时间
//            if ("createTime".equals(field.getName())) {
//                field.set(goods, new Date());
//            }
//
//
//            // 获取属性的属性值
//            Object o = field.get(goods);
//            System.out.println(o);


        }

        // 获取 商品类中 商品描述属性
//        Field goodsDescField = clz.getDeclaredField("goodsDesc");
//
//        goodsDescField.setAccessible(true);
//        goodsDescField.set(goods, "下v成本和封面和别的方面获得丰厚");
//
//        System.out.println(goods.getGoodsDesc());

获取方法

  • getMethod(methodName, …paramterType)
    根据方法名、获取所有 public 方法 (包含父类)
  • getDeclaredMethod(methodName, …paramterType)
    根据方法名获取当前类的某个method(不包括父类)
  • getMethods()
    获取所有 public 方法
  • getDeclaredMethod()

Method常见的方法

  1. getName() : 获取方法名
  2. getModifiers() : 获取修饰符
  3. getParameterTypes(): 获取参数类型数组
  4. getParameterCount() : 获取参数个数
  5. getReturnType() : 获取返回类型
  6. invoke(obj , …parameters) :调用方法
  7. setAccessible(true) : 允许访问私有属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值