谢谢
解决方案 »
- javaSe 基础
- servlet中返回的中文乱码
- SWING setSize
- 基于JAVA GUI的两矩阵相乘算法
- 请教一下,jsp与javascript有什么区别?谢谢!
- 急需个java程序 读取一个文件夹下所有文件的完整文件名,存入SQL SERVER数据库里
- dear all,我想取得服務端的目錄結構在客戶端顯示﹐有沒有很好的解決辦法﹖
- 百分求助, 如何实现Java中的 goto 操作, 如何将Java程序翻译成 Applet?
- 文件过滤???
- 请问如何保护我的.class文件被反编译成.java?
- 使用java io流一次性写入大量数据与逐个写入数据或与逐批写入数据有什么区别
- struts+spring+hibernate下将数据库内容导入到excel中
class c = Class.forName(“Example”);
factory = (ExampleInterface)c.newInstance(); 其中ExampleInterface是Example的接口,可以写成如下形式:
String className = "Example";
class c = Class.forName(className);
factory = (ExampleInterface)c.newInstance(); 进一步可以写成如下形式:
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构造。