Clone方法的使用以及浅拷贝和深拷贝的区别

clone方法

定义一个student类,创建一个对象,用clone克隆对象

  • clone方法只适用于自己类里面进行打点调用,在其他类里面打点调用clone方法,
  • 需要将clone方法写出,如果有异常,还需要进行异常处理
  • 1、自定义的类,使用clone方法,当前类必须要实现Cloneable接口
  • 如果不实现接口,则会抛出异常,java.lang.CloneNotSupportException
  • 2、因为object类的clone是protected修饰的,要重写此方法
  • 才能在不同包中访问,把访问修饰符定义为public
  • 3、Cloneable接口中没有方法,是一个标识性的接口,
  • 针对object类的clone方法的实现
  • 4、浅拷贝:引用变量拷贝的是地址,所有克隆的对象改变了对象的属性,原对象的属性也发生改变
  • 5、深拷贝:引用变量拷贝一份对象,克隆对象的属性改变,原对象的属性不发生变化

DemoClone.java

package cn.tedu.demo;
/**
 * 定义一个student类,创建一个对象,用clone克隆对象
 * clone方法只适用于自己类里面进行打点调用,在其他类里面打点调用clone方法,
 * 需要将clone方法写出,如果有异常,还需要进行异常处理
 * 1、自定义的类,使用clone方法,当前类必须要实现Cloneable接口
 *   如果不实现接口,则会抛出异常,java.lang.CloneNotSupportException
 * 2、因为object类的clone是protected修饰的,要重写此方法
 *   才能在不同包中访问,把访问修饰符定义为public
 * 3、Cloneable接口中没有方法,是一个标识性的接口,
 *   针对object类的clone方法的实现
 * 4、浅拷贝:引用变量拷贝的是地址,所有克隆的对象改变了对象的属性,原对象的属性也发生改变
 * 5、深拷贝:引用变量拷贝一份对象,克隆对象的属性改变,原对象的属性不发生变化
 * @author cll
 *
 */
public class DemoClone {
   
	public static void test1() throws CloneNotSupportedException {
   
		//浅拷贝,下面是浅拷贝的内容
		/*Student stu=new Student();
		stu.setAge(18);
		System.out.println(stu.getAge());
		Professor p=new Professor();
		p.setAge(20);
		stu.setP(p);
		Student stu2=(Student)stu.clone();
		stu2.setAge(19);
		System.out.println(stu2.getAge());
		stu2.getP().setAge(30);
		System.out.println("------");
		System.out.println(stu2.getP().getAge());*/
		//深拷贝
		//需要将Professor也进行clone方法的使用,还有实现Cloneable接口
		Student stu=new Student();
		stu.setAge(18
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值