首页 > 编程知识 正文

关于java对象克隆的问题,java实现对象克隆

时间:2023-12-27 22:26:27 阅读:324309 作者:SLOK

本文目录一览:

java如何实现对象的克隆

可以重载clone方法克隆对象

首先、该类要实现Cloneable的接口,不然执行clone方法的时候会抛出CloneNotSupportedException异常

然后、就在该类重载clone方法,自己加上克隆的逻辑,本人小白,手敲的代码

public class Book implement Cloneable{

    private String name;

    

    public Book(String name){

        this.name=name;

    }

    

    @Override

public Book clone() throws CloneNotSupportedException {

return new Book(this.name);

}

}

关于java克隆对象

--在使用clone方法时,对于每一个类,都需要做如下判断:

1--默认的clone方法是否能满足要求

2--默认的clone方法是否能通过调用可变子对象的clone方法修补

3--是否不应该使用clone

----如选择1和2,就必须实现Cloneable接口,使用public重定义clone方法

意思就是,你如果想用clone方法,首先要考虑Object的clone能不能满足你的需求,如果可以,那好,直接调用,反之,你就得必须在需要使用clone方法的类中实现Cloneable接口,自己写一个Clone规则。

java中对象的克隆疑问??

Object o1=new Object();

System.out.println(o1.hasCode());//打印o1的内存地址。

Object o2=new Object();

System.out.println(o2.hasCode());//打印o2的内存地址。

可见o1和o2拥有不同的内存数据,如果你让o2=o1,那o1和o2的地址就一样了,就是一个对象了,怎么还叫克隆?

老祖宗Object类的clone方法是将一个对象的数据原封不动的复制到另一个对象中去,比如o2=o1.clone();就将o1的数据复制了一份考贝到了另一块内存中,所以o2与o1地址不一样但数据相同。

你这里的super.clone();就是调用的Object类的clone()方法,调用Object的方法不就是省得你自己写了吗。

你可能还会问Object既然有clone()方法,而所有的类都是Object类的子类,那所有的类不都有clone()方法吗,干什么还自己写?Object类虽然有clone()方法,但是访问控制符是protected而不是public,于是别的类不可见,所以你需要重写它:

@Override

public Object clone(){

Object obj=null;

try {

obj= super.clone();

} catch (CloneNotSupportedException e) {

e.printStackTrace();

}

return obj;

}

而且你需要将你的类实现cloneable接口,这是必须的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。