反射
反射:就是程序在运行时,对于任意一个类,我们都能知道这个类的属性和方法,对于任和一个对象,我们也都能调用它的方法与属性,程序运行时动态的获取类和对象的信息。
反射的原理
JVM从磁盘上加载类.class字节码文件,然后通过字节码文件生成一个Class对象,然后调用类中的属性和方法;
反射的创建
1.new一个对象,然后用对象.getclass()进行获取Class对象
2.直接用类.class()来生成Class()对象
3.通过执行Class.forname()方法来生成Class对象
创建实例
1.Class对象.newInstance
2.通过Class对象晦气指定的Constructor对象,在通过构造器创建实例
反射的作用
1.可以越过泛型检查。如;当链表的泛型为String时,我们在链表中加入一个int型的数,在编译时就会报错;此时我们可以使用反射获取链表的class对象,然后在通过class对象调用它的add()方法,在向其中加入int类型的数字就可以了
2.运行配置文件;假设多个类中有一个相同的方法,每次都需要重新创建一个类对象,然后通过对象去调用,就会很繁琐。这时可以通过反射直接运行配置文件就可以。
反射的缺点
反射比直接调用更复杂,效率比直接调用低。
在普通程序中不建议使用反射。
需要在无安全限制的情况下使用反射。
反射的优点
灵活性好,扩展性好,降低耦合;
允许程序创建和控制任何类的对象,无需提前硬编码目标类;
破坏代码的逻辑性和可移植性。平台发生改变,代码行为就会发生改变。