电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

初始化类时newInstance和new的区别


发布日期:2021/5/3
 

在初始化一个类生成一个实例的时候newInstance() 和 new 有什么区别?

用newInstance与用new是区别的区别在于创建对象的方式不一样前者是使用类加载机制那么为什么会有两种创建对象方式?这个就要从可伸缩可扩展可重用等软件思想上解释了

Java中工厂模式经常使用newInstance来创建对象因此从为什么要使用工厂模式上也可以找到具体答案

例如

Class c = ClassforName(A);factory = (AInterface)cnewInstance();

其中AInterface是A的接口如果下面这样写你可能会理解

String className = A;Class c = ClassforName(className);factory = (AInterface)cnewInstance();

进一步如果下面写你可能会理解

String className = readfromXMlConfig;//从xml 配置文件中获得字符串Class c = ClassforName(className);factory = (AInterface)cnewInstance();

上面代码就消灭了A类名称优点无论A类怎么变化上述代码不变甚至可以更换A的兄弟类B C D只要他们继承Ainterface就可以

从jvm的角度看我们使用new的时候这个要new的类可以没有加载

但是使用newInstance时候就必须保证这个类已经加载这个类已经连接了而完成上面两个步骤的正是class的静态方法forName()方法这个静态方法调用了启动类加载器(就是加载java API的那个加载器)

有了上面jvm上的理解那么我们可以这样说newInstance实际上是把new这个方式分解为两步首先调用class的加载方法加载某个类然后实例化

这样分步的好处是显而易见的我们可以在调用class的静态加载方法forName时获得更好的灵活性提供给了我们降耦的手段

上一篇:用cos进行文件上传

下一篇:Greenfoot 快速入门