背景
工作也有四年了,基础的东西许久不看有些遗忘。一起来复习一下吧
什么是反射?
反射是在运行状态中,对于任意一个类,都能获取该类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性,这种动态获取类信息以及动态调用对象内容就称为Java的反射机制。
反射的用法
Class.forName(String className),
className.class,
对象.getClass()。
为什么要用反射呢?new不香吗
反射的重点在于运行阶段获取类的信息和调用类的方法,所以当你需要“某些信息在编码阶段不清晰,需要在运行阶段动态加载”,在这种场景下,可以使用反射。
反射应用场景
1.使用JDBC链接数据库时加载数据库驱动Class.forName()2.Spring通过反射来帮我们实例化对象,并放入到IOC容器中3.逆向代码 例如反编译4.利用反射,在泛型为int的arryaList集合中存放一个String类型的对象
原理:集合中的泛型只在编译器有效,而到了运行期,泛型则会失效
反射的优缺点
1。优点运行期类型的判断,动态类的加载,动态代理使用反射2。缺点性能是个问题,反射相当于一系列解释,通知jvm要做的事情,性能比直接的Java程序要慢。
反射和new的区别
-
通过反射创建对象时,可以根据类的全限定名(包括包名)来创建对象,而new创建对象时,只能根据类的简单名称来创建对象;
-
通过反射创建对象时,可以创建私有构造方法的对象,而new创建对象时,只能创建公有构造方法的对象;
-
通过反射创建对象时,可以在运行时动态的创建对象,而new创建对象时,只能在编译时创建对象;
-
通过反射创建对象时,可以创建任意类的对象,而new创建对象时,只能创建当前类的对象。
参考
https://blog.csdn.net/x_christ1/article/details/104591277
https://www.5axxw.com/questions/simple/hc2wjo