反射原理
什么是反射?
在运行状态中,可以知道任意一个类中的属性和方法,
对于任意类型的对象,可以调动对象的任意方法和属性。
反射的应用场景是什么?
在不知道使用者调用的是那个对象和方法时,反射可以在你调用传参时确定你使用的是那个对象和方法。可以极大的优化代码量。
为什么用反射?
优点:
反射其实就是程序能够自检自身的信息,就像程序会照镜子
反光看自己。在程序中可以检查某个类中的方法属性等信息。
并且能够动态调用,使程序更加灵活。
缺点:
使用反射会影响性能,因为所有的编译最优化是在编译期解决,
而反射是在运行时解决。所以如果大量使用反射对代码维护起来会很困难。
如何使用反射?
1.通过Class.forName(“包名+类名”)方法获取该类的字节码对象
2.获取对象的构造方法 字节码的对象值.getDeclaredConstructor()这个方法可以访问公开的构造也可以访问私有的构造方法。返回一个构造器
3.通过这个构造器的值.setAccessibke(true/或者false)来设置构造方法的访问范围。设置True代表公开的,false代表私有的。
4.执行构造方法创建当前类的对象 构造器的值.newInstance()这个方法返回一个Object类型对象,得到了当前类得实例。
5.调用该当前类对象进行操作数据。
6.
总结:
反射的入口是class对象,
反射的主要原理就是在class被编译后成为.class文件通过字节码对象获取文件中的所有属性。