Java基础 深拷贝浅拷贝

  • 非基本数据类型 需要new新空间
class Student implements Cloneable{private int id;private String name;private Vector course;public Student(){try{Thread.sleep(1000);System.out.println("Student Constructor called.");}catch (InterruptedException e){e.printStackTrace();}}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public Vector getCourse() {return course;}public void setCourse(Vector course) {this.course = course;}//浅拷贝public Student newInstance(){try{return (Student)this.clone();}catch (CloneNotSupportedException e){e.printStackTrace();}return null;}//深拷贝public Student deepClone(){try{Student cloning = (Student) super.clone();cloning.course = new Vector();return cloning;}catch (CloneNotSupportedException e){e.printStackTrace();}return null;}}public Object clone(){      //覆写clone(),深拷贝  try{  Student cloning = (Student) super.clone(); // 这里不能使用Student cloning = (Student) this.clone()的原因:正在覆写本类的clone()方法,如果再调用本类的函数,即:this.clone(),就相当于无限递归无限死循环了,最终会崩溃的。所以这里:super.clone()。cloning.courses = new Vector();     //关键点:非基本数据类型的空间需要自己新开辟一块儿  return cloning;  }catch(CloneNotSupportedException e){  e.printStackTrace();  }  return null;
}

参考资料

谨慎覆盖clone
Java中的clone() 深拷贝 浅拷贝

转载于:https://www.cnblogs.com/ironbrady/p/6671860.html

Java基础 深拷贝浅拷贝相关推荐

  1. Java基础-深拷贝和浅拷贝的区别

    深拷贝与浅拷贝 一般来说,拷贝的类型分为 深拷贝与浅拷贝. |-----------------------------| | 深拷贝:引用对象的值等信息,复制一份一样的.             | ...

  2. 深拷贝和浅拷贝的理解-----------【Java基础】

    拷贝,在IT界是一个计算机系统的DOS命令,意为"复制",是一个新名词,广泛地应用于IT的各个领域: 拷贝还分深拷贝和浅拷贝:拷贝的对象不同还会导致拷贝方式的不同:拷贝的若是引用数 ...

  3. 学习Java的深拷贝和浅拷贝

    关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象.可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用 ...

  4. 【转】JAVA中的浅拷贝和深拷贝

    原文网址:http://blog.bd17kaka.net/blog/2013/06/25/java-deep-copy/ JAVA中的浅拷贝和深拷贝(shallow copy and deep co ...

  5. java:深拷贝与浅拷贝

    拷贝的实现: 只有子类实现了Cloneable接口后才可以使用Object类提供的clone方法. protected native Object clone() throws CloneNotSup ...

  6. java深拷贝和浅拷贝_Java 深拷贝浅拷贝 与 序列化

    一.浅拷贝.深拷贝 浅拷贝会对对象中的成员变量进行拷贝:如果是基本类型,拷贝的就是基本类型的值:如果属性是内存地址(引用类型),拷贝的就是内存地址 : 深拷贝,除了基本类型外,引用类型所引用的对象也会 ...

  7. 叮!您收到一份超值Java基础入门资料!

    摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...

  8. 面经——Java基础

    Java基础 ArrayList 和 LinkedList 区别 双亲委派模型以及优点 String是否可以被继承及相关原因 String 和 StringBuffer.StringBuilder 的 ...

  9. 小猫的java基础知识点汇总(下)

    1.线程和进程有什么区别? 进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务. 不同的进程使用不同的内存空间,而 ...

最新文章

  1. 使用SeaJS实现模块化JavaScript开发
  2. Tensorflow MNIST浅层神经网络的解释和答复
  3. 吃火锅有四忌[转载]
  4. jenkins中Git Parameter Plugin使用
  5. 基于公开数据的特殊人群在线活动特征挖掘
  6. 没有调用save或update方法,却有sql语句执行
  7. hun暑期实训 最大报销额(01背包) 关于动态内存分配的new与delete
  8. Django 使用第三方服务发送电子邮件
  9. 【PL/SQL】PL/SQL语言基础
  10. Apache Flink 简单安装
  11. 本以为用的MyBatis框架就万无一失了,没想到还是被黑客注入了,我真的无语了!...
  12. 安卓rom制作教程_MIUI官方ROM(卡刷包、线刷包)合集
  13. 【项目实战】基于 springboot + mybatis + mysql 的电脑商城项目(附源码)
  14. NGUI常见功能解释
  15. hough变换检测直线 matlab,Hough变换直线检测MatLab代码 | 学步园
  16. 41-MybatisPlus
  17. android studio 模拟器文件管理器
  18. lerna 常用命令
  19. html5页面3d滚动轮播,jQuery实现的3D版图片轮播示例【滑动轮播】
  20. POJ 3104(二分算法,难难难)

热门文章

  1. 什么是字节码,采用字节码的好处是什么
  2. mysql函数lead用指定的字符串实现左填充指定长度
  3. Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
  4. 用计算机计算性别,2018预测生男生女计算器 超准的怀孕计算器查生男生女
  5. 数据库优化:SQL高性能优化指南,助你成就大神之路!
  6. 搞清这些陷阱,NULL和三值逻辑再也不会作妖
  7. 全库模式 用户模式 表模式_暗模式,亮模式和用户的故事
  8. axios源码中的10多个工具函数,值得一学~
  9. [译] React Hooks: 没有魔法,只是数组
  10. 科技前沿智能创新 2019北京智能家居 全屋智能博览会