怎么理解反射可以动态地创建类的实例

本文详细解释了Java反射机制,通过对比new关键字与反射创建对象的区别,阐述了反射的动态特性。举例说明如何在运行时通过字符串变量动态实例化类并设置属性值,强调了反射在不预先知道具体类名的情况下实现动态操作的能力。
摘要由CSDN通过智能技术生成

    之前对这个概念一直似懂非懂,看网上的答案是,通过new方法在编译时绑定类,而反射是程序运行时绑定类。这个回答是没问题,但是看完还是有点懵逼。

    看了一堆介绍和示例,理解之后自己真被自己蠢哭了。这句话主要是要理解动态的含义。

new方法创建实例:

TargetObject o = new TargetObject(); 

 new后面你必须明确写一个类名。

反射方法:

首先是拿到一个class对象

Class<?> myClass = Class.forName("classPath");

然后网上很多教程实例化对象

TargetObject targetObject = (TargetObject) tagetClass.newInstance();

我的思路就被这一步误导了,说好的动态呢?说好的反射可以在不知道具体实例化哪个类的时候,去实例化对象呢?怎么这里又出现了一个确定的类TargetObject?这跟用new有啥区别啊!

原来真实的用法是这样的:

        String classPath="grammar.reflection.TargetObject";
        String fieldName="value";
        //通过类路径获取
        Class myClass = Class.forName(classPath);
        //实例化对象
        Object o=myClass.newInstance();
        //获取类的属性并赋值
        Field myField = myClass.getDeclaredField(fieldName);
        myField.setAccessible(true);
        myField.set(o, "haha");
        //打印结果
        System.out.println(o);

 除了classPath和fieldName,下面的实例化对象以及给属性赋值操作,是不是没有出现跟类任何相关的信息?动态之所以叫动态,就是因为classPath和fieldName是变量,根据你传进去不同的classPath,就可以动态实例化出来不同的类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值