java 中clone()的使用方法

作者:皮蛋小粥 时间:2023-03-31 12:11:37 

java 中clone()的使用方法

前言:

clone就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有:

1 使用new操作符创建一个对象

2 使用clone方法复制一个对象

那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。而clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部。


package test;

public class Cloneoo {
public static void main(String[] args) {
 test t=new test();
 t.changeInt();
 System.out.println(t);
 try {
   test t1=(test) t.clone();//创建
   System.out.println(t1);
   System.out.println(t1.getI());
 } catch (CloneNotSupportedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
 }

}
}
class test implements Cloneable{
 private int i=0;
 public void setI(int i) {
   this.i = i;
 }
 public int getI() {
   return i;
 }
 public void changeInt(){
   this.i=1;
 }
 @Override
 protected Object clone() throws CloneNotSupportedException {
   // TODO Auto-generated method stub
   test t=null;
   t=(test) super.clone();
   return t;
 }

}

test.test@15db9742
test.test@6d06d69c
1

当类中包含一些对象的时候,我们就需要深复制,就是在对对象的复制之后,急着对对象中的非基本类型的属性也调用clone方法完成深复制。

clone方法执行的是浅拷贝

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:http://blog.csdn.net/qq442270636/article/details/74009452

标签:java,clone()
0
投稿

猜你喜欢

  • Java常用函数式接口总结

    2022-02-02 00:02:50
  • Spring Data JPA调用存储过程实例代码

    2023-11-25 00:13:15
  • Java 集合概览(小结)

    2023-11-08 02:50:37
  • JAVA算法起步之插入排序实例

    2021-05-30 15:52:30
  • Spring中Bean扫描原理详情

    2022-05-26 04:33:14
  • 使用游长编码对字符串压缩 Run Length编码示例

    2022-02-18 06:58:51
  • Java文件上传下载、邮件收发实例代码

    2022-07-05 06:40:00
  • C#使用三层架构开发Winform的详细案例

    2023-08-08 03:22:24
  • Android 实现视频字幕Subtitle和横竖屏切换示例

    2023-02-06 07:29:37
  • Java函数式编程(八):字符串及方法引用

    2022-05-02 22:28:23
  • Java实现分页的前台页面和后台代码

    2021-07-22 17:10:04
  • JFinal使用ajaxfileupload实现图片上传及预览

    2023-08-05 08:30:48
  • Android编程之文件读写操作与技巧总结【经典收藏】

    2023-10-16 02:20:52
  • java的package和import机制原理解析

    2021-07-20 08:19:05
  • java后台验证码生成的实现方法

    2021-10-01 05:59:26
  • C#实现功能强大的中国农历日历操作类

    2023-06-05 04:13:59
  • Java模拟计算机的整数乘积计算功能示例

    2022-01-30 19:25:51
  • C#正则表达式实用大全(建议收藏!)

    2023-08-29 20:23:58
  • C++对string进行大小写转换操作方法

    2023-11-03 04:32:59
  • 深入解析Android中的RecyclerView组件

    2021-12-02 13:07:32
  • asp之家 软件编程 m.aspxhome.com