Java基础 深拷贝浅拷贝
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基础 深拷贝浅拷贝相关推荐
- Java基础-深拷贝和浅拷贝的区别
深拷贝与浅拷贝 一般来说,拷贝的类型分为 深拷贝与浅拷贝. |-----------------------------| | 深拷贝:引用对象的值等信息,复制一份一样的. | ...
- 深拷贝和浅拷贝的理解-----------【Java基础】
拷贝,在IT界是一个计算机系统的DOS命令,意为"复制",是一个新名词,广泛地应用于IT的各个领域: 拷贝还分深拷贝和浅拷贝:拷贝的对象不同还会导致拷贝方式的不同:拷贝的若是引用数 ...
- 学习Java的深拷贝和浅拷贝
关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象.可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用 ...
- 【转】JAVA中的浅拷贝和深拷贝
原文网址:http://blog.bd17kaka.net/blog/2013/06/25/java-deep-copy/ JAVA中的浅拷贝和深拷贝(shallow copy and deep co ...
- java:深拷贝与浅拷贝
拷贝的实现: 只有子类实现了Cloneable接口后才可以使用Object类提供的clone方法. protected native Object clone() throws CloneNotSup ...
- java深拷贝和浅拷贝_Java 深拷贝浅拷贝 与 序列化
一.浅拷贝.深拷贝 浅拷贝会对对象中的成员变量进行拷贝:如果是基本类型,拷贝的就是基本类型的值:如果属性是内存地址(引用类型),拷贝的就是内存地址 : 深拷贝,除了基本类型外,引用类型所引用的对象也会 ...
- 叮!您收到一份超值Java基础入门资料!
摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...
- 面经——Java基础
Java基础 ArrayList 和 LinkedList 区别 双亲委派模型以及优点 String是否可以被继承及相关原因 String 和 StringBuffer.StringBuilder 的 ...
- 小猫的java基础知识点汇总(下)
1.线程和进程有什么区别? 进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务. 不同的进程使用不同的内存空间,而 ...
最新文章
- 使用SeaJS实现模块化JavaScript开发
- Tensorflow MNIST浅层神经网络的解释和答复
- 吃火锅有四忌[转载]
- jenkins中Git Parameter Plugin使用
- 基于公开数据的特殊人群在线活动特征挖掘
- 没有调用save或update方法,却有sql语句执行
- hun暑期实训 最大报销额(01背包) 关于动态内存分配的new与delete
- Django 使用第三方服务发送电子邮件
- 【PL/SQL】PL/SQL语言基础
- Apache Flink 简单安装
- 本以为用的MyBatis框架就万无一失了,没想到还是被黑客注入了,我真的无语了!...
- 安卓rom制作教程_MIUI官方ROM(卡刷包、线刷包)合集
- 【项目实战】基于 springboot + mybatis + mysql 的电脑商城项目(附源码)
- NGUI常见功能解释
- hough变换检测直线 matlab,Hough变换直线检测MatLab代码 | 学步园
- 41-MybatisPlus
- android studio 模拟器文件管理器
- lerna 常用命令
- html5页面3d滚动轮播,jQuery实现的3D版图片轮播示例【滑动轮播】
- POJ 3104(二分算法,难难难)
热门文章
- 什么是字节码,采用字节码的好处是什么
- mysql函数lead用指定的字符串实现左填充指定长度
- Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
- 用计算机计算性别,2018预测生男生女计算器 超准的怀孕计算器查生男生女
- 数据库优化:SQL高性能优化指南,助你成就大神之路!
- 搞清这些陷阱,NULL和三值逻辑再也不会作妖
- 全库模式 用户模式 表模式_暗模式,亮模式和用户的故事
- axios源码中的10多个工具函数,值得一学~
- [译] React Hooks: 没有魔法,只是数组
- 科技前沿智能创新 2019北京智能家居 全屋智能博览会