源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-04-04 20:47 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅谈Java中的克隆close()和赋值引用的区别
[b]学生类Student:[/b]
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();
 }

}
[b]测试克隆学生类:[/b]
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()和赋值引用的区别的全部内容了,希望对大家有所帮助,多多支持编程素材网~
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部