Java反射机制提供的功能:
在运行时构建一个类的对象
判断一个类所具有的成员变量和方法
调用一个对象的方法。
生成动态代理
反射的应用很多,很多框架都有用到:
Spring框架IOC基于反射创建对象和设置依赖属性。
Spring MVC的请求调用对应方法,也时通过反射。
JDBC class#forname(String className)方法,也是使用反射。
反射中,Class.forName 和 ClassLoader 区别?
这两者,都可用来对类进行加载。差别在于:
Class#forName(...)方法,除了将类的.class文件加载到JVM 中之外,还会对类进行解释,执行类中的static块。ClassLoader 只干一件事情,就是将
.class文件加载到 JVM 中,不会执行static中的内容,只有在 newInstance 才会去执行static块。
Class#forName(name, initialize, loader) 方法,带参函数也可控制是否加载 static 块,并且只有调用了newInstance 方法采用调用构造函数,创建类的对象。