黑马程序员--对象的克隆

----------   android培训java培训、期待与您交流! ---------- 

对象的克隆

对象的克隆又称对象的复制,它与对象的赋值不是一个含义,他们的区别可以根据下面的例子看出。

假设Student是一个类,并且该类有一个正确的clone()方法,下面的代码:

例一

Student s1 = new Student();

Student s2 = s1;

例二

Student s1 = new Student();

Student s2 = (Student)s1.clone();

 例一实际上是完成了对象引用的复制,也就是s1和s2指向是同一个对象。内存模型如下图

而例二则完成了s1对象的复制,把复制的的新对象用s2引用,s1和s2是两个对象,因为clone()方法返回的是Object类的对象,所以要对其返回值进行强制类型转换,以得到真确的对象。内存模型如下图:

对象的克隆通过clone()方法来实现,clone()方法将返回一个新对象,且新对象的初始状态与调用clone()方法的对象完全相同,对新克隆对象的的修改不会影响原对象的状态。在Object

类中定义了clone()方法,并且该方法被声明为protected类型,这就是决定了该方法只有在父类的包中和她的后代中才是可见的,尽管克隆方法是在所有类的父类Object中定义的,但克隆不会再每个类里自动进行,这意味着如果希望一个类能够克隆,必须要完成以下操作:

第一,  实现Cloneable接口第二,覆盖clone()方法,并且把覆盖访问权限设为public。第三:在自己的clone()方法中调用super.clone()。第四自己的clone()中捕获CloneNotSupertedException异常。

克隆对象实例:

package com.itheima;
 
class Student implements Cloneable {
   char sex;
   int age;
 
   Student(char sex, int age) {
     this.sex = sex;
     this.age = age;
   }
 
   public Object clone() {
     Object object = null;
     try {
        object = super.clone();
     } catch (CloneNotSupportedException e) {
        System.out.println("对象无法克隆");
     }
     return object;
   }
}
 
public class StudentClone {
 
   public static void main(String[] args) {
     Student s1 = new Student('男', 12);
     Student s2= (Student) s1.clone();
     System.out.println("对象一" + s1);
     System.out.println("s1.sex" + "=" + s1.sex + "s1.age" + "=" + s1.age);
     System.out.println("对象二" + s2);
     System.out.println("s2.sex" + "=" + s2.sex + "s2.age" + "=" + s2.age);
   }
}
 
 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值