java之浅克隆和深克隆

//Cloneable
//如果一个接口里面没有抽象方法
//表示当前的一个接口是一个标记性接口
//现在Cloneable表示了一旦实现,那么当前类的对象就可以被克隆
//如果没有实现,当前类的对象就不能被克隆


public class User implements Cloneable {
    private int id;//游戏角色
    private String username; //用户名
    private String password; //密码
    private String path; //游戏图片
    private int[] data; //游戏进度

    public User() {
    }

    public User(int id,String username, String password, String path, int[] data) {
        this.username = username;
        this.id = id;
        this.password = password;
        this.path = path;
        this.data = data;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public int[] getData() {
        return data;
    }

    public void setData(int[] data) {
        this.data = data;
    }

    public String toString() {
        return"角色编号:"+id+",用户名:"+username+",密码:"+password+",游戏图片:"+path+",进度:"+arrToString();
    }

    public String arrToString(){
        StringJoiner  sj=new StringJoiner(",","[","]");
        for (int i = 0; i <data.length ; i++) {
            sj.add("id:"+data[i]);
        }
       return sj.toString();
    }

    protected Object clone() throws CloneNotSupportedException {
        //调用父类的中clone方法
        //相当于让java帮我们克隆一个对象,并把克隆以后的对象返回出去


        //先把被克隆对象中的数组获取出来
        int[]data=this.data;
        //然后创建一个新的数组
        int[] newdata=new int[data.length];
        //拷贝数组中的数据
        for (int i = 0; i < data.length ; i++) {
            newdata[i]=data[i];
        }
        //调用父类中的方法克隆对象
        User u=(User)super.clone();
        //因为父类中的克隆方法是浅克隆,替换克隆出来的对象中数组地址值
        u.data=newdata;

        return u;
    }
    
}

public class ObjectDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        //protected  Object clone(int a)  //对象克隆

       //先创建一个对象
        int[] data={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
            User u1 = new User(1,"zhangsan","1234qwer","gril",data);

        //克隆对象
        //细节:方法会在底层创建一个对象,并把原对象中的数据拷贝过去
        //书写细节
        //1.重写Object中的clone 方法
        //2.让javabean类中实现Cloneable接口
        //3.创建原对象并调用clone就可以了.
         User u2= (User) u1.clone();

         int[]arr=u1.getData();
         arr[0]=100;

         System.out.println(u1);
         System.out.println(u2);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值