一、什么是反射:
1.允许运行中的Java程序对自身进行检查,并能直接操作程序的内部属性或方法,简单来说,我们可以利用反射机制在Java程序中,动态的去调用一些protected甚至是private的方法或类。
2.JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制
二、反射的原理:
三、反射的优缺点:
反射优点:
1、可以调用私有方法、变量
2、可以调用隐藏api接口
3、有助于模块解耦,如上面项目案例,如果接口可以直接调用,与底层的耦合大,反射可以直接使用的包名字符串进行调用
2、缺点:(1)反射会消耗一定的系统资源,因此,如果不需要动态地创建一个对象,那么就不需要用反射;
缺点:安全问题:反射可以获取到类对应的所有方法和属性,如果存在外部调用的情况,可能出现超出预期的调用,从而导致安全风险
四、反射的用途:
1、通过反射机制访问java对象的属性,方法,构造方法等
2.反射最重要的用途就是开发各种通用框架。比如很多框架(Spring)都是配置化的(比如通过XML文件配置Bean),为了保证框架的通用性,他们可能需要根据配置文件加载不同的类或者对象,调用不同的方法,这个时候就必须使用到反射了,运行时动态加载需要的加载的对象。
五、反射机制常用的类:
Java.lang.Class;
Java.lang.reflect.Constructor;
Java.lang.reflect.Field;
Java.lang.reflect.Method;
Java.lang.reflect.Modifier;
六、反射的基本使用:
利用对象调用getClass()方法获取该对象的Class实例;
使用Class类的静态方法forName(),用类的名字获取一个Class实例 ;
运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例;