`
jiagyao
  • 浏览: 99818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java关键字new和newInstance的区别

阅读更多
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。


Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如: 软件开发网

class c = Class.forName(“Example”);



factory = (ExampleInterface)c.newInstance();



其中ExampleInterface是Example的接口,可以写成如下形式:

http://www.mscto.com

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的那个加载器。

http://www.mscto.com



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


最后用最简单的描述来区分new关键字和newInstance()方法的区别:


newInstance: 弱类型。低效率。只能调用无参构造。

http://www.mscto.com


new: 强类型。相对高效。能调用任何public构造
分享到:
评论

相关推荐

    new关键字和newInstance() 的区分

    Java 中的 new 关键字和 newInstance() 方法都是用于创建对象的,但是它们之间有着本质的区别。理解这两者的区别对于 Java 编程尤其重要。 首先,new 关键字是 Java 的一个保留字,用于创建一个新的对象。例如,`A ...

    Java中new关键字和newInstance方法的区别分享

    在Java编程语言中,`new`关键字和`newInstance()`方法都是用来创建对象的,但它们在使用场景和工作原理上存在显著差异。了解这些差异对于编写高效、灵活的代码至关重要。 首先,`new`关键字是Java语法的一部分,...

    java 中newInstance()方法和new关键字的区别

    Java 中 newInstance() 方法和 new 关键字的区别 Java 中的对象创建方式有多种,newInstance() 方法和 new 关键字是其中两种常用的方式。但是,它们之间有着本质的区别。本文将详细介绍 newInstance() 方法和 new ...

    newInstance()方法和new关键字

    在Java编程语言中,创建对象是十分常见的操作,而`newInstance()`方法和`new`关键字则是实现这一目的的两种主要方式。它们之间的区别不仅在于一个是方法调用,另一个是语言提供的关键字,更深层次的区别体现在它们的...

    Java关键字的用法

    ### Java关键字的用法 Java作为一种广泛使用的编程语言,拥有丰富的关键字来支持其核心功能与特性。本文将详细介绍部分重要的Java关键字及其用法。 #### 1. `abstract` `abstract`关键字用于定义抽象类或抽象方法...

    浅析Java中的 new 关键字

    Java中的`new`关键字是创建和初始化对象的关键操作,它在编程中扮演着至关重要的角色。当我们使用`new`关键字时,实际上是执行了以下几个步骤: 1. 分配内存:Java虚拟机(JVM)在堆内存中为新对象分配所需的空间。...

    Java final关键字

    在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被用来声明一个变量、方法或类为不可变的。在这个学习demo中,我们将深入理解`final`关键字的各种用法及其背后的原理。 首先,`final`关键字用于变量...

    Java中new的用法.pdf

    在文档内容中,存在一些由于OCR扫描导致的错误和遗漏,例如“javaAPInewInstance()”应该理解为“java.lang.Class.newInstance()”,“ClassforName()”应该是“Class.forName()”。这些语法错误需要在实际阅读文档...

    Java中new的用法[参考].pdf

    在 Java 中,有两种创建对象的方式:使用 new 关键字和使用 newInstance() 方法。 * 使用 new 关键字创建对象:例如 `String sName = new String();` * 使用 newInstance() 方法创建对象:例如 `factory = ...

    Class.forName()_newInstance()_New_三者区别

    在Java编程中,`Class.forName()`, `newInstance()` 和 `new` 关键字都是与对象创建和类加载紧密相关的概念,但它们各自有着不同的用途和限制。 首先,`Class.forName("className")` 是一个静态方法,它用于在运行...

    Java中new的用法.doc

    #### 四、new与newInstance的区别 - **new关键字**: - 直接创建一个新的对象实例。 - 不需要类的加载器参与。 - **newInstance方法**: - 属于`java.lang.Class`类的方法。 - 需要在运行时通过类的完全限定名来...

    Java中new的用法[文].pdf

    然而,`newInstance()`和`new`关键字有明显的区别。`new`是关键字,直接创建新对象,而`newInstance()`是方法,它需要先通过`Class.forName()`加载类,然后才能实例化。使用`newInstance()`时,类必须已经被加载并且...

    java关键字final用法知识点

    总结起来,`final`关键字在Java中扮演着确保不可变性和防止覆盖的重要角色。它用于变量确保值不会改变,用于方法防止子类重写,用于类防止继承。理解并恰当使用`final`关键字,有助于编写出更安全、可维护的代码。在...

    Java面向对象程序设计static关键字.pptx

    Java面向对象程序设计中,static关键字是一个非常重要的概念,它有很多特点和作用,本文将对static关键字的特点、作用和使用场景进行详细的解释。 static关键字的特点 首先,static关键字可以用来修饰变量、方法和...

    Java 程序显示该关键字在类中的使用.docx

    在 Java 中,我们可以使用“this”关键字来调用当前类的构造函数,以避免名称冲突和提高代码可读性。 爪哇 public class ThisExample { int num = 10; public ThisExample() { System.out.println("Inside ...

    Instance_JAVA源码_

    在Java编程语言中,"实例"(Instance)通常指的是一个类的具体对象。当我们谈论"JAVA源码"时,这是指用Java编写的程序代码,它包含了类定义、方法实现、变量声明等元素,是我们理解和创建应用程序的基础。在这个...

    java反射之动态代理

    在Java中,`newInstance()`方法和`new`关键字是两种不同的对象创建方式。`new`关键字直接根据类名创建一个新的对象,而`newInstance()`是通过`Class`对象来创建对象,它需要先通过类加载机制将类加载到JVM中。`new...

    java面试100题

    2. 运用反射手段,调用 java.lang.Class 或者 java.lang.reflect.Constructor 类的 newInstance() 实例方法。 3. 调用对象的 clone() 方法。 4. 运用反序列化手段,调用 java.io.ObjectInputStream 对象的 ...

Global site tag (gtag.js) - Google Analytics