面试官:直接 new 对象不行吗,为何用反射?
new 是静态编译,只能用于编译期就能确定的类型, 而反射可以在运行时才确定类型并创建其对象。Java的反射机制就是动态编译,增加程序的灵活性,解耦。
具体来说就是静态编译是在编译的时候把你所有的模块都编译到程序中,当你启动这个程序的时候所有模块都加载进来了。当程序比较大时,加载的过程(就是当你运行程序时初始化的过程)就比较慢了。动态编译就不一样了,你编译的时候那些模块都没有编译进去,一般情况下你可以把那些模块都编译成dll,这样你启动程序(初始化)的时候这些模块不会被加载,而是在运行的时候,用到那个模块就调用哪个模块。
比如:Spring中的 IOC(工厂模式)
https://blog.csdn.net/a745233700/article/details/82893076
分别说说 使用new创建对象 和 通过反射创建对象 的区别,优劣势?
什么是反射
反射就是把 Java 类中的各种成分映射成一个个的 Java 对象。
Java反射机制的本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。其核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。
和 new 创建对象 的区别
https://www.cnblogs.com/jiazhutao/p/12447385.html
(1)new只有在知道类名之后才能new,而反射有时候不需要。