Java基础之-反射(三)

使用反射在运行时分析对象

在上一小节,我们了解了一些反射当中的方法,知道如何去查询任意一个对象的属性、方法和构造器。

  • 获取Class对象
  • 对象中获取这个类的属性 getDeclaredFields()…

在这一小节,我们将了解查看类具体内容。
下面我们看一段实例:将会有一些注释 希望小伙伴可以认真观看

package com.reflection;

import java.lang.reflect.Field;

public class ClassTest7 {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        Student s = new Student("张三", 18, "湖南", 1);

        Class<? extends Student> c = s.getClass();

        //我们获取一个私有的name属性
        Field f = c.getDeclaredField("name");
        System.out.println(f);

        /*
            这段代码有一个问题。我们上面获取的是一个似有的属性,所以在get set中JVM会抛出一个
            illegalAccessException 只能对可以访问的字段使用get和set方法
            Java安全机制允许查看对象的属性 但是不允许读写那些字段的值(除非有权限)

            解决方案: 暴力反射
         */
        //暴力反射
        //小伙伴需要查看这段问题 首先把这段代码所注释掉
        f.setAccessible(true); //默认是false 现在我们就可以进行获取私有的属性值了

        Object o = f.get(s);
        System.out.println(o);


    }
}

setAccessible方法是AccessibleObject类中的一个方法,它是Filed、Method、Constructor类的公共父类。拥有这个特性是为了调试、持久存储和类似机制提供的。

介绍方法的作用:

  • void setAccessible(boolean flag)
    • 设置或取消可访问对象的可访问标志,如果拒绝访问抛出illegalAccessExcpetion异常
  • Field getFiled(String name)
  • Field[] getFileds()
    得到指定名的公共字段,或所有字段的一个数组
  • Field getDeclaredField(String name)
    • 得到类中声明指定的字段名
  • Object get(Object obj)
    • 返回obj对象中的属性值
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philosophy7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值