Java有一下三种方法可以创建对象实例。
1.new
通常都是使用java的关键字new来创建对象实例。
若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。
- Something somethingNew = new Something();
Something somethingNew = new Something();
通过new创建对象实例必须把类名写在原代码里面。
2.clone
若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数).
- public class Something implements Cloneable{
-
private Something obj;
-
public Something cloneSomething()
- {
-
try {
-
obj = (Something)this.clone();
-
-
} catch (CloneNotSupportedException e) {
- e.printStackTrace();
- }
-
return obj;
-
- }
- }
public class Something implements Cloneable{
private Something obj;
public Something cloneSomething()
{
try {
obj = (Something)this.clone();
// obj = (Something)clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}
如果需要复制上面的那个obj指向的对象实例时,调用somethingNew.cloneSomething()方法就ok了。
但是为什么不直接使用somethingNew.clone()呢?
JDK中Object# clone()方法的原型是:
protected native Object clone() throws CloneNotSupportedException;
方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。
所以,必需重写Object的clone方法后才能使用。
- public Object clone()throws CloneNotSupportedException
- {
- Something obj;
-
obj= (Something)super.clone();
-
return obj;
- }
public Object clone()throws CloneNotSupportedException
{
Something obj;
obj= (Something)super.clone();
return obj;
}
值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出java.lang.CloneNotSupportedException。
另外clone方法所做的的操作是直接复制字段的内容,换句话说,这个操作并不管该字段对应的对象实例内容。
像这样字段对字段的拷贝(field to field copy)就成为"浅拷贝",clone方法所做的正是"浅拷贝".
3.newInstance
利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。
创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。
- somethingNew.getClass().newInstance().
somethingNew.getClass().newInstance().
或者使用下面的语句(只需要存在相应的.class文件即可)
- Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance();
Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance();
如果包下不存在相应.class文件,则会抛出ClassNotFoundException。
注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会
抛出java.lang.InstantiationException异常。无法进行实例化。
相关推荐
Java 创建对象的四种方法 Java 语言中创建对象的四种方式是:用 new 语句创建对象、运用反射手段、调用对象的 clone() 方法和运用反序列化手段。下面我们将详细阐述每种方法的实现原理和代码示例。 1. 用 new ...
下面将详细讲解Java中创建对象的五种方法,并通过实际示例进行演示。 1. **使用`new`关键字构造器创建对象** 这是最常见、最直接的方法。每个类都有一个构造器,用于初始化新创建的对象。例如,假设我们有一个名为...
"java类与对象实例" 在 Java 中,类和对象是两个紧密相连的概念。类是一种蓝图,用于创建对象,而对象是类的一个实例。类描述了对象的基本结构,包括属性、方法和事件等。类设计的关键概念包括封装、继承和多态。 ...
工厂方法是一种设计模式,它提供了一种创建对象的抽象,允许子类改变实例化过程。单例模式确保一个类只有一个实例,并提供全局访问点。 总的来说,Java实例化对象是编程中的基本操作,它涉及到类的构造,内存分配,...
在上述例子中,`ConcreteSub`是`AbstractBase`的实例,它实现了`AbstractBase`的抽象方法`doSomething()`,因此可以成功创建对象。 另外,Java中的动态代理机制(JDK Proxy)通常用于接口,而不是抽象类。因为Java...
Java中创建对象主要有四种显式的方式,分别是使用new关键字、反射机制、克隆克隆方法以及反序列化手段。每种方法都有其特定的使用场景和特点,以下是这些方法的详细说明: 1. 使用new关键字创建对象 这是最常见也是...
Java面向对象程序设计实例 Java是一种广泛使用的编程语言,以其面向对象的特性而著名。面向对象编程(Object-Oriented Programming, OOP)是Java的核心,它基于类和对象的概念,使得代码更易于理解、维护和重用。在...
* 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...
"Java面向对象编程实例详解2.txt"和"Java面向对象编程实例详解.txt"可能包含了详细的讲解和示例代码,涵盖了类的创建、对象的实例化、访问控制、构造函数、抽象类和接口、异常处理、集合框架等方面的知识。...
本文将详细讲解Java中创建对象的五种常见方式。 1. **构造器实例化** 最常见的方式是通过类的构造器来创建对象。构造器是一个特殊的方法,用于初始化新创建的对象。在类定义中,我们可以声明一个或多个构造器,每...
类通过关键字"class"声明,并且可以包含构造函数(用于创建对象)、访问修饰符(public、private等,控制成员的访问权限)、继承(通过extends关键字实现)和接口实现(通过implements关键字)等特性。 在压缩包中...
在Java中,通过`new`关键字和类的构造方法来创建对象。实验中,我们创建了两个`Monkey`对象`monkey1`和`monkey2`,并调用了它们的方法,展示了对象的使用。 成员变量和局部变量是Java中的两种变量类型。成员变量是...
JAVA3D,全称为Java 3D API,是Oracle公司推出的一种基于Java语言的三维图形编程接口。这个技术为开发者提供了强大的工具,用于创建复杂的、交互式的三维图形应用程序。JAVA3D官方实例对于初学者来说是一份宝贵的...
在Java编程语言中,继承是一种面向对象编程的重要特性,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。这有助于代码重用,减少冗余,并实现多态性。在这个特定的程序中,我们看到了一个关于...
一旦类被正确地加载和初始化后,就可以通过以下步骤来创建对象实例: 1. **分配内存**:JVM会在堆内存中为新创建的对象分配内存空间。分配内存时,会考虑对象所需的大小,包括实例变量的空间以及对齐填充等。如果...
源代码中的示例会展示如何创建和使用类,包括构造函数的使用,以及如何通过实例化类来创建对象。 2. **封装**:封装是面向对象编程的关键特征,它隐藏了对象内部的实现细节,仅通过公共接口与外界交互。这里的实例...
第三版》是一本深受Java开发者欢迎的实战指南,旨在通过丰富的实例来深入浅出地讲解Java编程的各个方面。这本书的高清PDF版本提供了清晰易读的阅读体验,而配套的代码则为读者提供了实践操作的机会,加深对理论知识...
根据标题和描述,我们将详细探讨Java创建对象的五种主要方式。 1. **使用`new`关键字创建对象** 这是最常见的创建对象的方式,通过调用类的构造器来实例化对象。例如: ```java Object obj = new Object(); ```...
1. 创建者类(Creator):这是核心类,它定义了创建对象的接口,但具体的创建过程由其实现类完成。 2. 具体创建者类(Concrete Creator):实现了创建者类的接口,负责实际的创建工作。 3. 原型接口(Prototype):...
2. **类实例属性**:类的实例属性是在对象创建时分配的,它们属于特定的对象实例,而非类本身。在Ext中,类实例属性可以通过类定义的配置项或者构造函数来设置,如`Ext.define('Person', {name: 'John'}`或`new ...