关于反射中的Class.forName、newInstance()、new关键字

用反射写了将近一个月的代码,都没有去好好研究下里面的门道,都是在百度上找相关的帖子摸索着前进;今天项目差不多已经完工,终于有机会来写个帖子做个总结,也方便刚入门的我在不久之后忘掉可以重新回来看!!!
1、首先我们项目需求是在不创建多个表对象的情况下,动态的对库中的表进行增删改查操作,故我考虑到使用反射;
2、所以我们使用反射来通过动态传入的类路径来获取到类对象;
3、我们有三种方式来获取到类对象:
(1)调用对象的getClass方法,返回对象的Class对象
(2)Class.forName(“类的全路径”),//据说可以在类不确定的情况下实例化class,最灵活;
(3)Class c=类名.class;
4、鉴于此次项目需求是动态传入表对象,故我们选取了第二种也是最灵活的一种方式;通过控制动态传入路径就可以获取不同的类对象;
关于反射中的Class.forName、newInstance()、new关键字
5、然后再我们反射调用mapper层的SelectByExample()时,我们需要传入方法参数类型,也就是每张表的表类型:Bd_defdoc.class;再没弄清楚class.forName之前,我一直是手动传入的xxx.class,费了很大的劲传值;
6、后来才发现两者的区别是一样的,都是获取到类对象;关于反射中的Class.forName、newInstance()、new关键字
6、最后再来说下其中碰到的几个一直不能理解的关键字:
**Class.forName()????*加载一个类,返回的是类的类名:相当于类.class
**newInStance()**方法可以创建一个class对象的实例,使用该方法实例化一个对象时该类必须已经被加载了;
new关键字实例化一个类时先加载再实例化;

7、所以:**BdMarbasclassExample bdMarbasclassExample = new BdMarbasclassExample();就相当于Class clazz=Class.forName(“com.siter.BdMarclassExample”);
Object obj=clazz.newInstance();
其中,bdMarbasclassExample就相当于obj;
clazz就相当于bdMarbasclassExample.class