反射

230 阅读1分钟

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 方法采用调用构造函数,创建类的对象。

blog.csdn.net/qq_27093465…

www.cnblogs.com/zhaopei/p/r…