Cloneable接口是一个标记接口,也就是没有任何内容,定义如下:

package java.lang;
pubilc interface Cloneable
{
}

这里分析一下这个接口的用法

clone方法是在Object中定义的,而且是protected型的,只有实现了这个接口,才可以在该类的实例上调用clone方法,否则会抛出CloneNotSupportException.Object中默认的实现是一个浅拷贝,也就是表面拷贝,如果需要实现深层次拷贝的话,必须对类中可变域生成新的实例.

pubilc class Unsupported{
public Object clone(){
Object obj;
try {
obj=super.clone();
} catch (CloneNotSupportedException ex) {
ex.printStackTrace(); //Exception was thrown
}
return obj;//返回的是null
}
}

加上 implements Cloneable 就可以了.可不可以不实现这个接口,但是覆盖Clone方法.

pubilc class Unnormal{
public Object clone(){
return new Unnormal();
}
}

这样肯定没有问题的,不过已经和java中的clone机制没有关系了,下面举一个例子说明浅拷贝和深拷贝.

public class ShallowCopy implements Cloneable{
private Date begin;
public Date getBegin(){
return this.begin;
}
public void setBegin(Date d){
this.begin=d;
}
public Object clone(){
Object obj=null;
try {
obj=super.clone();
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
return obj;
}
} public class DeepCopy implements Cloneable{
private Date begin;
public Date getBegin(){
return this.begin;
}
public void setBegin(Date d){
this.begin=d;
}
public Object clone(){
DeepCopy obj=null;
try {
obj=(DeepCopy)super.clone();
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
obj.setBegin((Date)this.getBegin().clone());
return obj;
}
}

 

Cloneable接口分析的更多相关文章

  1. Java 深拷贝、浅拷贝及Cloneable接口

    Cloneable接口是一个空接口,仅用于标记对象,Cloneable接口里面是没有clone()方法,的clone()方法是Object类里面的方法!默认实现是一个Native方法 protecte ...

  2. Cloneable接口和Object的clone()方法

    为什么要克隆 为什么要使用克隆,这其实反映的是一个很现实的问题,假如我们有一个对象: public class SimpleObject implements Cloneable { private ...

  3. Java的一个高性能快速深拷贝方法。Cloneable?

    本人在设计数据库缓存层的时候,需要对数据进行深拷贝,这样用户操作的数据对象就是不共享的. 这个思路实际上和Erlang类似,就是用数据不共享解决并发问题. 1. 序列化? 原来的做法,是用序列化,我用 ...

  4. 使用clone( )和Cloneable接口

    由Object类定义的绝大部分方法在本书其他部分讨论.而一个特别值得关注的方法是clone( ).clone( )方法创建调用它的对象的一个复制副本.只有那些实现Cloneable接口的类能被复制. ...

  5. Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

    Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么 ...

  6. Java中的浅复制和深复制 Cloneable clone

    先看一个简单案例 public class Test {     public static void main(String args[]) {         Student stu1 = new ...

  7. [FindBugs分析记录]Class defines clone() but doesn't implement Cloneable

    官网解释: This class defines a clone() method but the class doesn't implement Cloneable. There are some ...

  8. Android 匿名共享内存Java接口分析

    在Android 匿名共享内存驱动源码分析中介绍了匿名共享内存的驱动实现过程,本文在Android匿名共享内存驱动基础上,介绍Android匿名共享内存对外Android系统的匿名共享内存子系统的主体 ...

  9. Android 匿名共享内存C++接口分析

    在上一篇Android 匿名共享内存C接口分析中介绍了Android系统的匿名共享内存C语言访问接口,本文在前文的基础上继续介绍Android系统的匿名共享内存提供的C++访问接口.在C++层通过引入 ...

随机推荐

  1. 【转】github如何删除一个仓库

    原文网址:http://jingyan.baidu.com/article/647f0115b031887f2048a85a.html?qq-pf-to=pcqq.group 今天打算删除一个仓库重新 ...

  2. WebBrowser控件默认使用IE9,IE10的方法

    1,打开注册表 HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)     SOFTWARE        Microsoft           Internet E ...

  3. Majority Element II——LeetCode

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...

  4. 暴力求解——最大乘积 Maximum Product,UVa 11059

    最大乘积 Maximum Product 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/B 解题思路 ...

  5. Velocity常用方法

    1.字符串替换 replace#if($!{name} != '')#set($tempName = $!{name})#set($tempName = $tempName.Replace('abc' ...

  6. HDU1247 Hat’s Words(Trie的动态内存版本)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  7. 手机app

    手机app是什么? 由于iPhone.三星等智能手机的逐步流行和广泛普及,手机app这个词语开始频繁的出现在广大手机网民的视线中.也许你们还不知道什么是手机app,但你一定下载过手机app,你的手机里 ...

  8. [Javascript] Promise

    Promise 代表着一个异步操作,这个异步操作现在尚未完成,但在将来某刻会被完成. Promise 有三种状态 pending : 初始的状态,尚未知道结果 fulfilled : 代表操作成功 r ...

  9. HDU 4751 Divide Groups 2013 ACM/ICPC Asia Regional Nanjing Online

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 题目大意:判断一堆人能否分成两组,组内人都互相认识. 解题思路:如果两个人不是相互认识,该两人之 ...

  10. poj2255

    题目大意: 树恢复??树复原?? 小Valentine非常喜欢玩二叉树的游戏,他非常喜欢在二叉树的树根上随机的写上一下大写字母,这是她创造的一个例子: D / \ / \ B E / \ \ / \ ...