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();//实现cloneSystem.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();

JAVA之对象的克隆相关推荐

  1. JAVA复习(对象的克隆、正则表达式)

    对象的克隆 对象的克隆就是复制的操作,和之前学习的引用传递不同 在引用传递中一个 实例 可以有多个名字 但是多个名字都指向一个对象 克隆出来的对象 和之前的对象 没有任何的引用关系 想要实现对象的克隆 ...

  2. Java实现对象的克隆方式

    Java实现对象克隆的方法 1.Java实现克隆有两种形式 浅拷贝 深拷贝 在Java中吗,我们说两个对象是否相等通常有两层含义: 对象的内容是否相等,通常使用到对象的 equals(Object o ...

  3. Java实现对象深度克隆

    两种方式:   1). 实现Cloneable接口并重写Object类中的clone()方法:   2). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆 ...

  4. Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

  5. 【JAVA零基础入门系列】Day14 Java对象的克隆

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  6. Java提高—对象克隆(复制)/对象属性拷贝

    对象克隆(复制)假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byt ...

  7. java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆

    为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说 ...

  8. (Java)对象克隆技术

    在 Java 中支持对象的克隆操作,直接使用 Object 类中的 clone() 方法即可,方法定义如下: protected Object clone() throws CloneNotSuppo ...

  9. java,对象的克隆

    这次写的是有关java对象的克隆 首先是 java对象的假克隆 对于基本类型我们可以用"="来进行克隆,此时对于两个变量除了相等没有其他的关系 但对于引用类型来说就不能简单的使用& ...

最新文章

  1. Lintcode107 Word Break solution 题解
  2. Rancher搭建集群
  3. [LeetCode]Majority Element
  4. 嵌入式系统开发怎样快速度入门
  5. 关闭C#主窗体弹出是否关闭对话框
  6. 新代数控系统参数说明书_台湾新代宏程序编程书
  7. java 线程 状态 图_Java提高——多线程(一)状态图
  8. win2008 php mysql zend phpmyadmin_Windows2008 最新版Apache2.PHP5.MySQL6.PHPMyadmin.ZendOptimizer安装图解...
  9. python如何输出两列数据_Python-如何将一列分为两列?
  10. 以为来自东华理工大学学生的SCI投稿经验
  11. mysql 启动报错Can't connect to local MySQL server through socket '/data/mysql/mysql/mysql.sock'(111)...
  12. Ubuntu 19.04 缺少libpng12.so.0
  13. Mac PyCharm下numpy安装
  14. 用计算机算平米怎么算,平米换算亩怎么算(平方米换算亩计算器)
  15. scheme语言编译成c语言,Scheme语言--简单介绍
  16. 2019产品数据管理(PDM)技术说明
  17. 微信广告转化统计java,百度推广oCPC微信号复制转化次数统计系统数据接口
  18. html把字母a显示为其asc码,HTML ASCII码
  19. 多模态机器学习简述(Guide to Multimodal Machine Learning)
  20. 小记一次海量数据实时查询域名库设计(上)

热门文章

  1. 深圳AfterShip】美图技术副总裁洪小军带队的研发团队需要招聘高级技术人才
  2. vue ajax拦截器,Vue-resource拦截器判断token失效跳转详解
  3. saminside.zip
  4. 像经营公司一样经营自己
  5. 酷狗音乐盒forlinu酷狗音乐盒有没 for mac的啊
  6. 二元逻辑回归损失函数的数学解释与公式推导
  7. CentOS 7 | 下载并安装yum
  8. linux乘机模式怎么关闭,坐飞机前 在CentOS Linux中检查电池容量
  9. 《Microsoft Sql server 2008 Internal》读书笔记--第七章Special Storage(3)
  10. 龙华教育局网站招标服务器,教育局服务器招标公告