[Java学习笔记]对象克隆

对象克隆:

浅克隆:

被克隆的对象中的值类型数据被复制一份新值,但是引用的对象只被复制其引用传递给新克隆出来的对象

深克隆:

被克隆的对象中的值类型数据被复制一份新值,并且其中引用的对象会重新创建新的对象,把新对象的引用传递给新克隆出来的对象


Java中实现克隆:

Java中Object中定义了clone方法,默认为浅克隆操作,即你只是简单super.clone得到的结果是浅克隆的结果,如果需要深克隆,则需要实现Cloneable接口,并且重写clone方法

查看Java源代码发现Object中的克隆方法如下:

protected native Object clone() throws CloneNotSupportedException;

通过JNI调用,也就是Object的默认clone实现就是C++中的浅克隆操作.

C++中克隆(复制)一个对象的途径一般为两种:

一是实现类的【复制构造函数】

二是实现【=号运算符】的重载

对于C++而言,所谓的浅克隆和深克隆就只是一个概念了,需要浅克隆那么在上述两种操作中就传递指针,如果需要深克隆则new出新的对象即可

一个类不显示实现此两个方法,无法进行对象的克隆(复制),然而由于Java的Object是默认浅克隆,所以可推断Object中的native
clone方法是一个浅复制

[Java学习笔记]对象克隆,布布扣,bubuko.com

时间: 2024-08-02 02:50:19

[Java学习笔记]对象克隆的相关文章

Java学习笔记 对象拷贝

1.Java里的clone分为: A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍. Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法.必须要遵循下面三点 1.在派生类中覆盖基类的clone()方法,并声明为public[Object类中的clone()方法为protected的]. 2.在派生类的clone()方法中,调用super.clone(). 3.

java学习笔记 对象序列化

对象序列化就是把一个对象变为二进制数据流的一种方法.如果一个类的对象想被序列化,它要实现Serializable接口,这个接口是个标识接口(只定义了接口,并没有定义方法),表示这个对象具有被序列化的能力. 实现Serializable接口之后,表示这个类具有被数据流传输的能力,如果想进行输入和输出,要使用两个类:ObjectOutputStream 和 ObjectInputStream 序列化时,只有属性被序列化 如果一个对象的某个属性不希望被序列化,可以使用transient关键字声明(把这

Java学习笔记一:对象与存储

1.用引用来操作对象 Java是面向对象的编程语言,一切都能看作是对象,通过引用来完成对对象的操作. // String 是对象,而s对指向这个String对象的引用 String s; 注意:我们是通过对象的引用来操纵对象数据的,如果对象没有关联数据(如没有被初始化),则会出现空引用,报空指针异常:java.lang.NullPointerException 2.数据存储 (1)寄存器:位于CPU内部,是处理最快的区域,但是存储空间有限.Java不能通过程序直接控制. (2)堆栈:位于RAM(

Java学习笔记3-操作符

Java基本操作符:+.-.*./.%.=.==.!=.+=.-=. 优先级:先乘除后加减,如果是连接符+号会优先往前匹配,比如 a+++++b,会被解释称 a++ ++ +b,所以会报错,需要自行使用括号隔离为 (a++) + (++b). 对象的引用如果赋值给了对象的引用后,2 个对象将指向同一个引用,有一个对象的引用重新赋值后将同时影响到另一个对象,比如 ClassName classA = new ClassName(); ClassName classB = new ClassName

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

Java学习笔记_25_Collections类

25.Collections类: Collections类是一个工具类,用来对集合进行操作,它主要是提供一些排序算法,包括随机排序.反相排序等. Collections类提供了一些静态方法,实现了基于List容器的一些常用算法. Collections的一些方法列表: · void sort(List): 对List内的元素进行排序. · void shuffle(List): 对List内的元素随机排序. · void reverse(List): 对List内的元素进行逆序排列. · voi

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记8--接口总结

接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note8.html,转载请注明源地址. 生活中的接口: 什么是接口? 一个Java接口是一些方法特

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my