首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java上Class.forName的作用是什么,为什么要使用它(转)

2012-12-26 
java下Class.forName的作用是什么,为什么要使用它(转)String className readfromXMlConfig//从xml 配置

java下Class.forName的作用是什么,为什么要使用它(转)

String className = readfromXMlConfig;//从xml 配置文件中获得字符串 class c = Class.forName(className); factory = (ExampleInterface)c.newInstance();

?
上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类Example2?,?Example3?,?Example4……,只要他们继承ExampleInterface就可以。?

从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java?API的那个加载器。?

现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。?这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。?

最后用最简单的描述来区分new关键字和newInstance()方法的区别:?
newInstance:?弱类型。低效率。只能调用无参构造。?
new:?强类型。相对高效。能调用任何public构造。

热点排行