SlideShare a Scribd company logo
1 of 16
Download to read offline
北京圣思园科技有限公司
http://www.shengsiyuan.com
• 浅复制与深复制概念
– 浅复制(浅克隆):被复制对象的所有变量都
含有与原来的对象相同的值,而所有的对其他
对象的引用仍然指向原来的对象。换言之,浅
复制仅仅复制所考虑的对象,而不复制它所引
用的对象。
• 浅复制与深复制概念
– 深复制(深克隆):被复制对象的所有变量都
含有与原来的对象相同的值,除去那些引用其
他对象的变量。那些引用其他对象的变量将指
向被复制过的新对象,而不再是原有的那些被
引用的对象。换言之,深复制把要复制的对象
所引用的对象都复制了一遍。
• Java的clone()方法【定义在Object类中】
– clone方法将对象复制了一份并返回给调用者。
一般而言,clone()方法满足:
– ①对任何的对象x,都有x.clone() !=x
• 克隆对象与原对象不是同一个对象
– ②对任何的对象x,都有
x.clone().getClass()= =x.getClass()
• 克隆对象与原对象的类型一样
– ③如果对象x的equals()方法定义恰当,那么
x.clone().equals(x)应该成立。
• Java中对象的克隆
– ①为了获取对象的一份拷贝,我们可以利用Object类
的clone()方法。
– ②在派生类中覆盖基类的clone()方法,并声明为
public【Object类中的clone()方法为protected的】。
– ③在派生类的clone()方法中,调用super.clone()。
– ④在派生类中实现Cloneable接口。
• 说明:
– ①为什么我们在派生类中覆盖Object的clone()
方法时,一定要调用super.clone()呢?
• 在运行时刻,Object中的clone()识别出你要复制
的是哪一个对象,然后为此对象分配空间,并进行
对象的复制,将原始对象的内容一一复制到新对象
的存储空间中。
– ②继承自java.lang.Object类的clone()方法
是浅复制
• 把对象写到流里的过程是序列化(Serilization)
过程,而把对象从流中读出来的过程则叫做反序
列化(Deserialization)过程。应当指出的是,
写在流里的是对象的一个拷贝,而原对象仍然存
在于JVM里面。
• 在Java语言里深复制一个对象,常常可以
先使对象实现Serializable接口,然后把对
象(实际上只是对象的一个拷贝)写到一
个流里,再从流里读出来,便可以重建对
象。
• 这样做的前提是对象以及对象内部所有引
用到的对象都是可串行化的,否则,就需
要仔细考察那些不可串行化的对象可否设
成transient,从而将之排除在复制过程之
外。
• 注意:Cloneable与Serializable都是
marker Interface,也就是说他们只是一个
标识接口,没有定义任何方法。
• 当一个类实现了Serializable接口时,表明
该类可被序列化,这个时候Eclipse会要求
你为该类定义一个字段,该字段名字为
serialVersionUID,类型为long,提示信
息如下
• The serializable class Student4 does
not declare a static final
serialVersionUID field of type long
• 你可以随便写一个,在Eclipse中它替你生
成一个,有两种生成方式:
一个是默认的1L,比如:private static
final long serialVersionUID = 1L;
一个是根据类名、接口名、成员方法及属
性等来生成一个64位的哈希字段,比如:
private static final long
serialVersionUID =
8940196742313994740L;之类的。
• 当你一个类实现了Serializable接口,如果
没有定义serialVersionUID,Eclipse会提
供这个提示功能告诉你去定义之。
在Eclipse中点击类中warning的图标一下
【即那个黄色的图标】,Eclipse就会自动
给定两种生成的方式,如上面所述。如果
不想定义它,在Eclipse的设置中也可以把
它关掉的,设置如下
• Window ==> Preferences ==> Java
==> Compiler ==> Error/Warnings
==> Potential programming
problems
将Serializable class without
serialVersionUID的warning改成ignore
即可。
• 如果你没有考虑到兼容性问题时,就把它
关掉,不过有这个功能是好的,只要任何
类别实现了Serializable这个接口的话,如
果没有加入serialVersionUID,Eclipse都
会给你warning提示,这个
serialVersionUID为了让该类别
Serializable向后兼容。
• 如果你的对象序列化后存到硬盘上面后,
可是后来你却更改了类的field(增加或减少
或改名),当你反序列化时,就会出现
Exception的,这样就会造成不兼容性的问
题。
• 但当serialVersionUID相同时,它就会将
不一样的field以type的缺省值Deserialize,
这个可以避开不兼容性的问题。

More Related Content

Viewers also liked (13)

Io 1
Io 1Io 1
Io 1
 
Mohammed Hussain (C.V)
Mohammed Hussain (C.V)Mohammed Hussain (C.V)
Mohammed Hussain (C.V)
 
Max ontdekt de stad.6
Max ontdekt de stad.6Max ontdekt de stad.6
Max ontdekt de stad.6
 
Perluasan kuasa
Perluasan kuasaPerluasan kuasa
Perluasan kuasa
 
Superheroes image pdf
Superheroes image pdfSuperheroes image pdf
Superheroes image pdf
 
Datos mercadeo digital
Datos mercadeo digitalDatos mercadeo digital
Datos mercadeo digital
 
Therefore
ThereforeTherefore
Therefore
 
Tweets truman
Tweets trumanTweets truman
Tweets truman
 
Iterasys :: Café com Qualidade - Testadores Precisam Saber Programar?
Iterasys ::  Café com Qualidade - Testadores Precisam Saber Programar?Iterasys ::  Café com Qualidade - Testadores Precisam Saber Programar?
Iterasys :: Café com Qualidade - Testadores Precisam Saber Programar?
 
Max ontdekt de stad
Max ontdekt de stadMax ontdekt de stad
Max ontdekt de stad
 
Actividad2
Actividad2Actividad2
Actividad2
 
Inner class
Inner classInner class
Inner class
 
Service excellence Award
Service excellence AwardService excellence Award
Service excellence Award
 

More from Medivh2011 (17)

北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader北京圣思园深入Java虚拟机 class loader
北京圣思园深入Java虚拟机 class loader
 
Unit test lesson 3
Unit test lesson 3Unit test lesson 3
Unit test lesson 3
 
Unit test lesson 1
Unit test lesson 1Unit test lesson 1
Unit test lesson 1
 
Unit test lesson 2
Unit test lesson 2Unit test lesson 2
Unit test lesson 2
 
Swing
SwingSwing
Swing
 
Reflection
ReflectionReflection
Reflection
 
Network
NetworkNetwork
Network
 
Multithread
MultithreadMultithread
Multithread
 
Jdk5
Jdk5Jdk5
Jdk5
 
Io 3
Io 3Io 3
Io 3
 
Io 2
Io 2Io 2
Io 2
 
Event
EventEvent
Event
 
El
ElEl
El
 
Collection
CollectionCollection
Collection
 
Class loader
Class loaderClass loader
Class loader
 
Awt
AwtAwt
Awt
 
Ant
AntAnt
Ant
 

Recently uploaded

1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
黑客 接单【TG/微信qoqoqdqd】
 
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
jakepaige317
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
jakepaige317
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
mekosin001123
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
mekosin001123
 

Recently uploaded (6)

1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
1.🎉“入侵大学入学考试中心修改成绩”来袭!ALEVEL替考大揭秘,轻松搞定考试成绩! 💥你还在为无法进入大学招生系统而烦恼吗?想知道如何通过技术手段更改...
 
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
哪里可以购买日本筑波学院大学学位记/做个假的文凭可认证吗/仿制日本大学毕业证/意大利语CELI证书定制
 
EDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptxEDUC6506_ClassPresentation_TC330277 (1).pptx
EDUC6506_ClassPresentation_TC330277 (1).pptx
 
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
泽兰应用科学大学毕业证制作/定制国外大学录取通知书/购买一个假的建国科技大学硕士学位证书
 
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptxEDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
EDUC6506(001)_ClassPresentation_2_TC330277 (1).pptx
 
educ6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptxeduc6506presentationtc3302771-240427173057-06a46de5.pptx
educ6506presentationtc3302771-240427173057-06a46de5.pptx
 

Clone