java 反射总结

一、通过配置文件实现反射
1.根据配置文件xx.properties指定信息和要调用的方法
classfullpath=com.xxxx.xxxx
method=xx
这样做的好处就是不修改源码的情况下来调控程序,符合开闭原则(ocp原则:不修改代码,实现扩容)

二、反射机制
java反射机制是允许程序在执行期通过ReflectionAPI得到任意类的内部信息(成员变量、构造器、成员方法、返回类型、定义类型等等),并且能够操作对象的属性和方法。在加载完类之后,就会在堆中生成一个class类型对象,一个类只有一个class对象,这个对象包含了类的完整结构信息。我们可以通过这个对象获取到这个类的结构。我们可以把这个类看成一面镜子,我们通过这个镜子看到类的结构,这种形象的称之为反射。

三、类加载过程
类对象 通过javac加载为 class字节码文件 通过类加载器ClassLoader到达类对象/堆中(成员变量、构造器、成员方法)我们可以通过反射机制获取到class对象/堆中的方法。

四、反射机制可以做什么
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时得到任意一个类所具有的成员变量和方法
4.在运行时调用任意一个对象的成员变量和方法
5.生成动态代理

五、setAccessible()方法
1.Method、Field和Constructor对象都有setAccessible()方法。
2.setAccesssible()的作用是启动和禁用访问安全检查的开关,参数值设为true表示反射的对象在使用时取消访问检查,提高反射的效率,设为false则相反。

六、Class类
1.Class也是类,因此也继承Object类
2.Class类对象不是new出来的,是系统自己创建的
3.对于某个类的Class对象,在内存中只有一份,因为类只加载一次
4.每个类的实例都会记得自己是由哪个Class实例生成的
5.通过Class可以完整地得到一个类的完整结构,通过一系列api
6.Class对象啊存放在堆中的
7.类的字节码二进制数据,是放在方法区的,有的地方称为类的元数据(方法代码、变量名、方法名、访问权限等)

七、获取Class类对象
1.前提你得知道这个类的全类名,且改类在类路径下,可以通过Class类的静态方法forName()获取。这种多用于配置文件,读取类全路径,加载类。
如:Class cla=Class。forName(“java.lang.Cat”)
2.前提你知道具体的类,通过类的Class获取,这个方法安全可靠。这种多用于参数传递,例如通过反射得到对应构造器对象。
如:Class cla= Cat.class
3.前提知道某个类的实例,然后调用该实例的getClass()方法获取Class对象,这种通过创建好的对象,获取Class对象
如:Class cla=对象.getClass();
4.其他方法
ClassLoader cla=对象.getClass().getClassLoader();
Class cla1=cla.loadClass(“类的全类名”)
5.八个基本数据类型获取
Class cla=八个基本数据类型之一.class
6.基本数据类型对应的包装类获取
Class cls =包装类.TYPE

8、哪些类型有Class对象?
1.外部类、成员内部类、静态内部类、局部内部类、匿名内部类
2.interface接口
3.数组
4.enum枚举
5.annotion注解
6.基本数据类型
7.void

9、静态和动态类加载
1.什么是静态加载:编译时加载相关的类,比如封装的对象,没有则报错,依赖性很强(创建对象时、当子类被加载父类也被加载时、调用类中静态成员变量时)
2.什么是动态加载:运行是加载需要的类,如果运行的时候不需要这个类,则不会加载这个类,也不会报错,依赖性增强(通过反射)

10、总结
newInstance()只能用于无参构造器,对于private的可以使用设置setAccessible(ture)进行调用改方法或者变量。反射的优点在于可以动态的创建和使用对象。缺点就是有点消耗性能的我们可以设置setAccessible(ture)降低性能,这样就可以不用进行安全检测。

山外青山楼外楼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值