从Class.forName想到的……

来源:互联网 发布:中国安徽网络电视台 编辑:程序博客网 时间:2024/04/27 23:48

Class.forName是“用来加载类的”,其实这话还是有点抽象,更加具体的说就是“用来将类加载到jvm中”,这样就清楚许多了。

我们都知道,所有的class文件都要加载到jvm中才可以得到运行,所以当我们需要加载一个类时就可以用Class.forName将这个类加载到jvm中。下面两个语句:

A a = (A)Class.forName("pacage.A").newInstance();

A a = new A();

都是创建包package中类A的一个对象a。这两种写法爱用哪种就用哪种,当然可以发现,我们用的最多的还是直接new吧!很少人问为什么,虽然很多人在使用jdbc干活的时候读用到了Class.forName这句代码。

我们观察第一个创建对象的方式,它有一个最大的好处就是类名可以作为参数的形式传入,然后创建对象。这使得一个简单的new可以分为两步进行:

1、第一步

Class temp = Class.forName("pacage.A");;

2、第二步

A a = temp.newInstance();

看到了吧,一个简单的new可以分解为两步,而这里关键的参数是最重要的,我们说“有参数就有变化”,这个参数带来的变化是千变万化的。

工厂模式相信大家伙都知道,Spring的DI就是一个很好的工厂模式,当我们使用Spring进行开发时,new语句已经不出现了,那么对象怎么创建的呢?对就是用的Class.forName进行的。这也就是为什么我们在使用Spring的时候常常要在配置文件里面将类的路径配置的完完当当的。

就这么一个简单的new, Java就将其设计为两种方式了,而Class.forName的方式实在是让我叫绝。

真的是“多一个参数就多了一个精彩啊”,这里面的“玄机”需要好好的感悟……

原创粉丝点击