//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); } }