栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

JAVA之对象的克隆

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA之对象的克隆

JAVA之对象的克隆

1.为什么要克隆?
①方便,克隆的对象可能包含一些已经修改过的属性,而new出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”使用clone方式很方便;
②速度快,clone方法最终将调用JVM中的原生方法完成复制也就是调用底层的c++代码,所以一般使用clone方法复制对象要比新建一个对象然后逐一进行元素复制效率要高。

public class text {
	public static void main(String[] args) {
			Cat cat =new Cat("x",5);
	try {
			Cat newcat=(Cat) cat.clone();//实现clone
		System.out.println(cat.toString());//输出原来的
		System.out.println(newcat);//输出克隆出来的
		}catch (CloneNotSupportedException e) {//要捕抓异常并抛出
			e.printStackTrace();
		}
	}
}

2.进行克隆的条件
对象需要具备克隆功能:
(1)实现Cloneable接口,(标记接口)
(2)重写Object类中的clone方法
3.如何实现clone
① 实现Cloneable接口并重写Object类中的clone()方法;
② 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。对象序列化后写入流中,再从流中读取,生成新的对象,新对象和原对象之间也是完全互不影响的。

protected Object clone() throws CloneNotSupportedException {//重写clone方法
		return super.clone();
	}

4.注意
1, clone()不会调用构造方法;new会调用构造方法。
2, new对象时根据类型确定分配内存空间的大小, clone是根据原对象分配内存
3.如果为一个不实现cloneable的类调用clone的话,那么就会抛出一个CloneNotSupportedException异常。相对于实现cloneable接口的类来说,如果为使用默认方法Object.clone的类的实例调用clone的话,就必须采取以下动作之一:
1.在clone的调用周围包装一个try代码块并捕捉到CloneNotSupportedException异常。
2.将异常CloneNotSupportedException添加到调用clone的方法的throws子句中,抛出这个异常。
以下为

try {
			Cat newcat=(Cat) cat.clone();
		System.out.println(cat.toString());
		System.out.println(newcat);
		}catch (CloneNotSupportedException e) {
			e.printStackTrace();
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/984199.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号