在初始化一个类生成一个实例的时候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时获得更好的灵活性提供给了我们降耦的手段 |