反射笔记

反射定义:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

反射能够在程序执行时取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

反射在日常开发中用的比较少,能说的上来的比如用JDBC 连接数据库时使用 Class.forName()通过反射加载数据库的驱动程序,虽然用的比较少,但是反射搞懂反射能够帮助看懂一些框架的源码,比如Spring框架等。
以下是我的联系案例:


public class FanSheClass {
    private String name;
    public FanSheClass() {
    }
    public FanSheClass(String name) {
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void say(String word) {
        System.out.println("my name is "+this.name+",I wanna say that  "+word);
    }
    private void doSth() {
        System.out.println("I did sth, my name is "+this.name);
    }
}

-------------------------------------------------------------
public class TestFanShe {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException {
    //获取Class对象
        Class<?> fansheClass = Class.forName("base.FanSheClass");
        //生成实例
        Object o =fansheClass.getConstructor().newInstance();
        //遍历打印类的方法
        for (Method method : fansheClass.getDeclaredMethods()) {
            System.out.println(method.getName());
        }
       //调用类的方法 fansheClass.getDeclaredMethod("say",String.class).invoke(o,"invoked by fanshe");
        Field name = fansheClass.getDeclaredField("name");
        //暴力反射修改私有属性
        name.setAccessible(true);
        //修改类的属性
        name.set(o, "reflected");
        Method doSth = fansheClass.getDeclaredMethod("doSth");
        //暴力反射
        doSth.setAccessible(true);
        doSth.invoke(o);
    }
}

通过 Class.forName(“base.FanSheClass”)获取特定的Class对象,再通过Class对象获取构造方法,然后通过构造方法的newInstance()方法生成一个实例。Class对象的getDeclaredField()、getDeclaredMethod()方法能够获取该类中方法和字段,如果是私有的可以通过设置setAccessible来是西安暴力反射。
https://blog.csdn.net/sinat_38259539/article/details/71799078
https://blog.csdn.net/yanghao201607030101/article/details/107675509

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值