本文主要是介绍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;}// 重写克隆方法子列才可以调用@Overrideprotected 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 CloneNotSupportedException {//创建学生对象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());//也就是说把一个对象的引用赋值给一个引用,当这个引用发什么该改变的时候,同一个引用指向的对象会发生改变,但是克隆的不会变化,//把克隆的对象改变他的一些属性,那么也不会影响到其他的对象的值的改变}
}
这篇关于Java中的克隆close()和赋值引用的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!