java的反射机制


java的反射机制



一、获取类对象的三种方式


一、反射的引入
•Class类是Java 反射机制的起源和入口
•用于获取与类相关的各种信息
•提供了获取类信息的相关方法
•Class类继承自Object类
编译时知道类或对象的具体信息,此时直接对类和对象进行操作即可,无需反射(reflection)
如果编译不知道类或对象的具体信息,此时应该如何做呢?使用反射来实现。比如类的名称放在XML文件中,属性和属性值放在XML文件中,需要在运行时读取XML文件,动态获取类的信息

在这之前我们想要讲一下获取类对象的三种方式:
在这里插入图片描述
其中类名.class、对象名.getClass()方式在编码时已经知道了要操作的类,而Class.forName()方式在操作的时候,可以知道,也可以不知道要操作的类。所以当编码时还不知道要操作的具体类,就只能使用Class.forName()方式了。
类名.class的好处在于不仅可以应用于普通的类、接口,还可以获取基本数据类型、数组的Class对象信息。


二、使用反射创建对象


利用反射机制来创建对象:
1.调用无参数构造方法创建对象
•方法1:通过Class的newInstance()方法
•方法2:通过Constructor的newInstance()方法

2.调用有参数构造方法创建对象:
通过Constructor的newInstance()方法创建对象

第一种:调用无参数的构造器在这里插入图片描述
结果是:在这里插入图片描述
第二种:使用有参数的构造器
在这里插入图片描述
结果是:在这里插入图片描述
第三种:使用全类名的方式 也是比较常见的一种在以后的spring xml中还有些框架中使用的比较多在这里插入图片描述
结果是:在这里插入图片描述
**

注意:

**
如果构造器不是public的时候就要加上下面这句话:
如果构造器是的话就加上getDeclaredConstructor 并设置set
如果是方法的时候就加上getDeclaredMethod
如果是属性的话就加上getDeclaredField

**

三、总结

**
反射优点
功能强大
1)编码时不知道具体的类型,可以使用反射动态操作
2) 突破封装的限制,即使private的成员也可以进行操作
反射缺点:
1).代码繁琐,可读性差
2).突破封装的限制,即使private的成员也可以进行操作(既是优点也是缺点)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值