今天看了工厂模式,里面有关于通过反射机制来创建对象。我目前为止我的理解是这样的(以下只是个人理解,不对之处请拍砖哈~):
(1)通过Class的静态方法Class.forName(String classpath)将.class文件加载到虚拟机中,所谓加载实际上做的事情包括:1)为静态变量分配空间并初始化。2)执行静态块代码。3)生成类对象,即Class类的对象,该对象描述了被加载类的信息。
可以对该生成的类对象进行相关的操作,如得到对象的名称,得到静态方法并执行。
(2)通过类对象的不同构造器,生成相应的对象,并调用方法。
对new 和instance区别的理解:
new:强类型,高效率
instance:弱类型,低效率
· 通过new进行对象生成时,实际上在程序代码中已经默认知道了类的名称信息,因此二者存在某种耦合。而instance生成对象的方法将待生成对象的信息通过字符串作为参数传输,代码本身并没有生成类进行关联,因此实现了解耦。
· new一次性实现了类的加载,类的实例;而instance将这两个过程分开,可以对类对象进行控制。当然通过new生成对象后可以通过对象getClass方法得到对象的类对象。
我写的测试代码如下:
package com.ht.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTarget