JAVA进阶之反射

反射使得JAVA具有一定的动态性。

反射是一种在运行过程中动态获取信息,构造对象以及调用方法的机制。

反射通过获取类对象来实现。
所有的JAVA类都具有其类对象,是在类加载时生成的。类对象包含类的信息、构造方法和普通方法。
可以通过三种方式获取类对象,分别是:

//Classname代表需要获取类对象的类名
Class c1 = Class.forName("Classname");
Class c2 = Classname.class;
Class c3 = new Classname().getClass();
//通过类对象来获得构造器并且生成一个实例
Classname c = (Classname)c1.getConstructor().newInstance();

反射机制使得创建对象可以不通过new关键字调用构造器,而是通过类名生成类对象以获得其构造器。
通过new关键字调用构造器,则必须存在该类以及类信息,否则编译不通过。并且如果要修改类时,会修改所有与它相关的类的信息,提高代码的耦合度,降低可维护性。
而通过反射机制获得对象,可以不需要事先确定类的信息,而可以通过配置文件等方式动态获取类的信息。
在需要修改类信息时,只需要对配置文件中的信息进行修改即可。

通过反射可以修改属性的值,只需要采取以下操作:

Classname c = new Classname();
//获取类对象,调用类对象的getDeclaredField方法
Field f1 = c.getClass().getDeclaredField("name");
//设置c的name属性
f1.set(c,"BurNIng");

通过反射可以获取类中的方法:

//获取Classname的类对象
Class c1 = Class.forName("Classname");
//通过类对象构建该类的实例
Classname c = (Classname)c1.getConstructor().newInstance();
//通过类对象获取setName方法信息,String.class表明需要传参数类型为String
Method m = c1.getMethod("setName",String.class);
//调用m的方法,表明调用实例名为c的setName方法,传参值为BurNIng
m.invoke(c,"BurNIng")

反射是Spring框架的基石。Spring框架的核心控制反转(IOC)是建立在反射的基础上的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值