浅谈Java中的克隆close()和赋值引用的区别

网友投稿 189 2023-07-04


浅谈Java中的克隆close()和赋值引用的区别

学生类Student:

package 克隆clone;

/*要克隆必须实现这个借口:Cloneable,以标记这个对象可以克隆

Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。

这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。

*/

public class Student implements Cloneable {

private String name;

private int age;

public Student() {

}

public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

// 重写克隆方法子列才可以调用

@Override

protected Object clone() throws CloneNotSupportedException {

return super.clone();

}

}

测试克隆学生类:

package 克隆clone;

/*

* protected void finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定。

* protected Object clone():创建并返回此对象的一个副本。

* A:重写该方法

*

* Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。

* 这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。

*/

public class StudentClone {

public static void main(String[] args) throws CloneNotSupportedExcVXIIZeption {

//创建学生对象

Student s = new Student();

s.setName("林青霞");

s.setAge(27);

//克隆学生对象

Object obj = s.clone();

Student s2 = (Student)obj;

System.out.println("---------");

System.out.println(s.getName()+"---"+s.getAge());

System.out.println(s2.getName()+"---"+s2.getAge());

//以前的做法

Student s3 = s;

System.out.println(s3.getName()+"---"+s3.getAge());

System.out.println("---------");

//其实是有区别的

s3.setName("刘意");

s3.setAge(30);

System.out.println(s.getName()+"---"+s.getAge());

System.out.println(s2.getName()+"---"+s2.getAge());

System.out.println(s3.getName()+"---"+s3.getAge());

System.out.println("---------");

//把克隆的改一下呢?

s2.setName("克隆改的名称");

s2.setAge(66);

System.out.println(s.getName()+"---"+s.getAge());

System.out.println(s2.getName()+"---"+s2.getAge());

System.out.println(s3.getName()+"---"+s3.getAge());

//也就是说把一个对象的引用赋值给一个引用,当这个引用发什么该改变的时候,同一个引用指向的对象会发生改变,但是克隆的不会变化,

//把克隆的对象改变他的一些属性,那么也不会影响到其他的对象的值的改变

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅谈Java的String中的subString()方法
下一篇:java 过滤器模式(Filter/Criteria Pattern)详细介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~