`
softkid
  • 浏览: 101667 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java创建对象实例的三种方法

    博客分类:
  • java
阅读更多

Java有一下三种方法可以创建对象实例。

1.new

通常都是使用java的关键字new来创建对象实例。

若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。

Something somethingNew = new Something();

 通过new创建对象实例必须把类名写在原代码里面。

 

2.clone

若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数).

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;
}

 值得注意的是 :如果需要使用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(). 

或者使用下面的语句(只需要存在相应的.class文件即可)

Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance();

 如果包下不存在相应.class文件,则会抛出ClassNotFoundException。

注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会

抛出java.lang.InstantiationException异常。无法进行实例化。

9
2
分享到:
评论
4 楼 somefuture 2016-08-23  
Object object = new Object() {
String args = "";
int a = 0;
};如果是对于这样的代码,后面怎么拿到里面的属性呢?
3 楼 lionbule 2011-08-27  
softkid 写道
dianziermu 写道

貌似还有一种:
运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。

这个我还真不知道,能给我解释一下么,最好能结合源码。

这个是先创建一个对象,通过序列化的方式来持久化当前创建的对象,然后通过反序列化得到新对象。但新对象的内容和创建时一样的。
2 楼 softkid 2008-12-16  
dianziermu 写道

貌似还有一种:
运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。

这个我还真不知道,能给我解释一下么,最好能结合源码。
1 楼 dianziermu 2008-12-15  
貌似还有一种:
运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。

相关推荐

    Java创建对象的四种方法.doc

    Java 创建对象的四种方法 Java 语言中创建对象的四种方式是:用 new 语句创建对象、运用反射手段、调用对象的 clone() 方法和运用反序列化手段。下面我们将详细阐述每种方法的实现原理和代码示例。 1. 用 new ...

    java创建对象的五种方法demo

    下面将详细讲解Java中创建对象的五种方法,并通过实际示例进行演示。 1. **使用`new`关键字构造器创建对象** 这是最常见、最直接的方法。每个类都有一个构造器,用于初始化新创建的对象。例如,假设我们有一个名为...

    java类与对象实例

    "java类与对象实例" 在 Java 中,类和对象是两个紧密相连的概念。类是一种蓝图,用于创建对象,而对象是类的一个实例。类描述了对象的基本结构,包括属性、方法和事件等。类设计的关键概念包括封装、继承和多态。 ...

    java实例化对象的过程

    工厂方法是一种设计模式,它提供了一种创建对象的抽象,允许子类改变实例化过程。单例模式确保一个类只有一个实例,并提供全局访问点。 总的来说,Java实例化对象是编程中的基本操作,它涉及到类的构造,内存分配,...

    Java实例化一个抽象类对象的方法教程

    在上述例子中,`ConcreteSub`是`AbstractBase`的实例,它实现了`AbstractBase`的抽象方法`doSomething()`,因此可以成功创建对象。 另外,Java中的动态代理机制(JDK Proxy)通常用于接口,而不是抽象类。因为Java...

    java四种创建对象的方式

    Java中创建对象主要有四种显式的方式,分别是使用new关键字、反射机制、克隆克隆方法以及反序列化手段。每种方法都有其特定的使用场景和特点,以下是这些方法的详细说明: 1. 使用new关键字创建对象 这是最常见也是...

    java面向对象程序设计实例

    Java面向对象程序设计实例 Java是一种广泛使用的编程语言,以其面向对象的特性而著名。面向对象编程(Object-Oriented Programming, OOP)是Java的核心,它基于类和对象的概念,使得代码更易于理解、维护和重用。在...

    java 基础 类对象创建实例化过程 实例解析

    * 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...

    Java面向对象编程实例详解

    "Java面向对象编程实例详解2.txt"和"Java面向对象编程实例详解.txt"可能包含了详细的讲解和示例代码,涵盖了类的创建、对象的实例化、访问控制、构造函数、抽象类和接口、异常处理、集合框架等方面的知识。...

    Java创建对象的5种方式.java

    本文将详细讲解Java中创建对象的五种常见方式。 1. **构造器实例化** 最常见的方式是通过类的构造器来创建对象。构造器是一个特殊的方法,用于初始化新创建的对象。在类定义中,我们可以声明一个或多个构造器,每...

    再发一些Java对象、Java类学习实例.rar

    类通过关键字"class"声明,并且可以包含构造函数(用于创建对象)、访问修饰符(public、private等,控制成员的访问权限)、继承(通过extends关键字实现)和接口实现(通过implements关键字)等特性。 在压缩包中...

    实验三:Java类与对象

    在Java中,通过`new`关键字和类的构造方法来创建对象。实验中,我们创建了两个`Monkey`对象`monkey1`和`monkey2`,并调用了它们的方法,展示了对象的使用。 成员变量和局部变量是Java中的两种变量类型。成员变量是...

    JAVA3D官方实例

    JAVA3D,全称为Java 3D API,是Oracle公司推出的一种基于Java语言的三维图形编程接口。这个技术为开发者提供了强大的工具,用于创建复杂的、交互式的三维图形应用程序。JAVA3D官方实例对于初学者来说是一份宝贵的...

    java继承类实例

    在Java编程语言中,继承是一种面向对象编程的重要特性,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。这有助于代码重用,减少冗余,并实现多态性。在这个特定的程序中,我们看到了一个关于...

    java对象创建过程

    一旦类被正确地加载和初始化后,就可以通过以下步骤来创建对象实例: 1. **分配内存**:JVM会在堆内存中为新创建的对象分配内存空间。分配内存时,会考虑对象所需的大小,包括实例变量的空间以及对齐填充等。如果...

    《Java面向对象编程》实例源代码

    源代码中的示例会展示如何创建和使用类,包括构造函数的使用,以及如何通过实例化类来创建对象。 2. **封装**:封装是面向对象编程的关键特征,它隐藏了对象内部的实现细节,仅通过公共接口与外界交互。这里的实例...

    Java经典实例.第三版(高清PDF+配套代码)

    第三版》是一本深受Java开发者欢迎的实战指南,旨在通过丰富的实例来深入浅出地讲解Java编程的各个方面。这本书的高清PDF版本提供了清晰易读的阅读体验,而配套的代码则为读者提供了实践操作的机会,加深对理论知识...

    《剑指offer》Java创建对象的五种方式.pdf

    根据标题和描述,我们将详细探讨Java创建对象的五种主要方式。 1. **使用`new`关键字创建对象** 这是最常见的创建对象的方式,通过调用类的构造器来实例化对象。例如: ```java Object obj = new Object(); ```...

    java创建者模式实例

    1. 创建者类(Creator):这是核心类,它定义了创建对象的接口,但具体的创建过程由其实现类完成。 2. 具体创建者类(Concrete Creator):实现了创建者类的接口,负责实际的创建工作。 3. 原型接口(Prototype):...

    Ext实现java的面向对象实例

    2. **类实例属性**:类的实例属性是在对象创建时分配的,它们属于特定的对象实例,而非类本身。在Ext中,类实例属性可以通过类定义的配置项或者构造函数来设置,如`Ext.define('Person', {name: 'John'}`或`new ...

Global site tag (gtag.js) - Google Analytics