java中几种创建对象的方式
java中几种创建对象的方式
在java程序中,对象可以被显式地或者隐式地创建.
下面说说四种显式的创建对象的方式:
● 用new语句创建对象
● 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法
● 调用对象的clone()方法
● 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.
例子:
package dgut.ke.javatest;
public class Customer implements Cloneable {
private String name;
private int age;
public Customer() {
this("unknown",0);
System.out.println("call default constructor");
}
public Customer(String name,int age) {
this.name = name;
this.age = age;
System.out.println("call second constructor");
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public boolean equals(Object o) {
if (this == o)
return true;
if (! (o instanceof Customer))
return false;
final Customer other = (Customer) o;
if (this.name.equals(other.name) && this.age == other.age)
return true;
else
return false;
}
public String toString() {
return "customer.name = "+name+" customer.age = "+age;
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// 运用反射手段创建Customer对象
Class objectClass = Class.forName("dgut.ke.javatest.Customer");
Customer c1 = (Customer) objectClass.newInstance();
System.out.println("c1 --> " + c1);
//用new创建Customer对象
Customer c2 = new Customer("Tom",20);
System.out.println("c2 --> " + c2);
//运用克隆手段创建Customer对象
Customer c3 = (Customer) c2.clone();
System.out.println("c3 --> " + c3);
System.out.println("c2 == c3 " + (c2==c3));
System.out.println("c2.equals(c3) " + c2.equals(c3));
}
}
Class类的forName方法public static Class<?> forName(String className)
throws ClassNotFoundException
返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于:
Class.forName(className, true, currentLoader)
其中 currentLoader 表示此类的定义类加载器。
例如,以下代码片段返回 java.lang.Thread 类的运行时 Class 描述符。
Class t = Class.forName("java.lang.Thread")
调用 forName("X") 将导致名为 X 的类被初始化。
参数:
className - 所需类的完全限定名。
返回:
具有指定名的类的 Class 对象。
抛出:
LinkageError - 如果链接失败
ExceptionInInitializerError - 如果此方法所激发的初始化失败
ClassNotFoundException - 如果找不到该类
Object类的clone()方法
protected Object clone()
throws CloneNotSupportedException
创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。一般来说,对于任何对象 x,如果表达式:
x.clone() != x
是正确的,则表达式:
x.clone().getClass() == x.getClass()
将为 true,但这些不是绝对条件。一般情况下是:
x.clone().equals(x)
将为 true,但这不是绝对条件。
按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()。
按照惯例,此方法返回的对象应该独立于该对象(正被克隆的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被克隆对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。
Object 类的 clone 方法执行特定的克隆操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意:所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我克隆。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。
返回:
此实例的一个克隆。
抛出:
CloneNotSupportedException - 如果对象的类不支持 Cloneable 接口,则重写 clone 方法的子类也会抛出此异常,以指示无法克隆某个实例。
java中几种创建对象的方式相关推荐
- Java中两种抛出异常的方式
Java中两种抛出异常的方式 在Java中有两种抛出异常的方式,一种是throw,直接抛出异常,另一种是throws,间接抛出异常. 直接抛出异常是在方法中用关键字throw引发明确的异常.当thro ...
- java在创建对象时必须_Java中5种创建对象的方式
以下是一些在Java中创建对象的方法: 1. 使用new关键字 使用new关键字是创建对象的最基本方法.这是在java中创建对象的最常见方法.几乎99%的对象都是这样创建的.通过使用这个方法,我们可以 ...
- Java中4种创建对象的方法
4种创建对象的方法: 使用 new 关键字调用对象的构造器: 使用 Java 反射的 newInstance() 方法: 使用 Object 类的 clone() 方法: 使用对象流 ObjectIn ...
- java中三种基本循环方式详解
#博学谷IT学习技术支持# Java循环for,while和do-while 简述:如果对于同一种操作需要执行多次的话,就要使用到循环结构.它可以大大简化代码的书写量,让我们的开发更便捷. 例如:打印 ...
- Java中三种交换值得方式
方式一: 适用于任意数据类型 int i= 3 ,j=4; int temp = 0; temp = i; i = j; j = temp; 方式二:只适用于整型数据 int i = 3,j = 4; ...
- js中四种创建对象的方式
一. 1 var user = new Object(); 2 user.first="Brad"; 3 user.last="Dayley"; 4 user. ...
- 一个人就需要对象之js中八种创建对象方式
前言:说,点进来是不是喜欢我的笑容!!!大家好,我叫C乐,(恩,很直不gay)一名退役的大学生,喜欢摩旅.从上课的一次css接触后,便喜欢上了前端,以下是我的一些学习笔记,站在前辈们的肩膀上,分享一些 ...
- java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较(转)
java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式详解与比较(转) http://wishlife.javaeye.com/blog/181865 posted on 2010-12 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...
http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...
最新文章
- FPGA之道(4)锁存器与寄存器
- 【经验】新人学习写程序的第一道坎
- springboot中使用ApplicationListener和ApplicationEvent /@EventListener监听事件
- 使用代码执行organization unit determination逻辑
- 目标检测系列(七)——CornerNet:detecting objects as paired keypoints
- word List 08
- JPA教程:实体映射-第2部分
- LeetCode 1706. 球会落何处(模拟)
- current of 使用
- mongodb集群数据同步及故障演练
- Java架构师之路:从码农到年薪五十万的架构师
- 吐血给女朋友讲解spring循环依赖
- 微信支付页面不显示以及空白页error -1
- “云上贵州”大赛完整诠释大数据三大业态
- elasticsearch forcemerge
- 皕杰报表在chrome中emitter=print无效问题的解决
- 儿童护眼灯怎么选?护眼灯合格的品牌推荐
- 小米电视安装电视家方法
- unity3d,android平台下,高德地图搜索附近
- 魔方机器人02 使用opencv-python进行颜色识别及K-Means聚类算法