本文共 611 字,大约阅读时间需要 2 分钟。
反射机制是在程序运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 都能够调用它的任意一个属性和方法。依靠此机制,可以动态的创建一个类的对象和调用对象的方法。 常用的Api为Class.forName(完整包名)等等 优点就是增加灵活性,可以在运行时动态获取对象实例。缺点是反射的效率很低,而且会破坏封装,通过反射可以访问类的私有方法,不安全。Spring 框架的 IOC 基于反射创建对象和设置依赖属性。
mybatis框架通过读取sql,得到字段名称(与属性名相同),并用反射的方式将User对象创建出来,之后调用其set方法进行参数注入。最后放到List中这两者,都可用来对类进行加载。差别在于:
ClassforName(…) 方法,除了将类的 .class 文件加载到JVM 中之外,还会对类进行解释,执行类中的 static 块,进行类的初始化
ClassLoader 只干一件事情,就是将 .class 文件加载到 JVM 中,不会执行 static 中的内容,只有在 newInstance 才会去执行 static 块,不会进行类的初始化
Class.forName得到的class是已经初始化完成的
Classloder.loaderClass得到的class是还没有链接的转载地址:http://tuowi.baihongyu.com/